diff --git a/app/components/pub/ui/accordion/Accordion.vue b/app/components/pub/ui/accordion/Accordion.vue new file mode 100644 index 00000000..1cd25bbe --- /dev/null +++ b/app/components/pub/ui/accordion/Accordion.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/accordion/AccordionContent.vue b/app/components/pub/ui/accordion/AccordionContent.vue new file mode 100644 index 00000000..585ad9bb --- /dev/null +++ b/app/components/pub/ui/accordion/AccordionContent.vue @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/components/pub/ui/accordion/AccordionItem.vue b/app/components/pub/ui/accordion/AccordionItem.vue new file mode 100644 index 00000000..d0875a90 --- /dev/null +++ b/app/components/pub/ui/accordion/AccordionItem.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/accordion/AccordionTrigger.vue b/app/components/pub/ui/accordion/AccordionTrigger.vue new file mode 100644 index 00000000..36ff1cad --- /dev/null +++ b/app/components/pub/ui/accordion/AccordionTrigger.vue @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/app/components/pub/ui/accordion/index.ts b/app/components/pub/ui/accordion/index.ts new file mode 100644 index 00000000..9340ac06 --- /dev/null +++ b/app/components/pub/ui/accordion/index.ts @@ -0,0 +1,4 @@ +export { default as Accordion } from './Accordion.vue' +export { default as AccordionContent } from './AccordionContent.vue' +export { default as AccordionItem } from './AccordionItem.vue' +export { default as AccordionTrigger } from './AccordionTrigger.vue' diff --git a/app/components/pub/ui/alert-dialog/AlertDialog.vue b/app/components/pub/ui/alert-dialog/AlertDialog.vue new file mode 100644 index 00000000..aaa22d70 --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialog.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogAction.vue b/app/components/pub/ui/alert-dialog/AlertDialogAction.vue new file mode 100644 index 00000000..38956c41 --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogAction.vue @@ -0,0 +1,22 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogCancel.vue b/app/components/pub/ui/alert-dialog/AlertDialogCancel.vue new file mode 100644 index 00000000..624b1962 --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogCancel.vue @@ -0,0 +1,22 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogContent.vue b/app/components/pub/ui/alert-dialog/AlertDialogContent.vue new file mode 100644 index 00000000..3ecf1506 --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogContent.vue @@ -0,0 +1,43 @@ + + + + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogDescription.vue b/app/components/pub/ui/alert-dialog/AlertDialogDescription.vue new file mode 100644 index 00000000..3c78b776 --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogDescription.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogFooter.vue b/app/components/pub/ui/alert-dialog/AlertDialogFooter.vue new file mode 100644 index 00000000..55d0a0eb --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogFooter.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogHeader.vue b/app/components/pub/ui/alert-dialog/AlertDialogHeader.vue new file mode 100644 index 00000000..c61c4495 --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogHeader.vue @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogTitle.vue b/app/components/pub/ui/alert-dialog/AlertDialogTitle.vue new file mode 100644 index 00000000..c39522ab --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogTitle.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/AlertDialogTrigger.vue b/app/components/pub/ui/alert-dialog/AlertDialogTrigger.vue new file mode 100644 index 00000000..e790748f --- /dev/null +++ b/app/components/pub/ui/alert-dialog/AlertDialogTrigger.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/alert-dialog/index.ts b/app/components/pub/ui/alert-dialog/index.ts new file mode 100644 index 00000000..448d5198 --- /dev/null +++ b/app/components/pub/ui/alert-dialog/index.ts @@ -0,0 +1,9 @@ +export { default as AlertDialog } from './AlertDialog.vue' +export { default as AlertDialogAction } from './AlertDialogAction.vue' +export { default as AlertDialogCancel } from './AlertDialogCancel.vue' +export { default as AlertDialogContent } from './AlertDialogContent.vue' +export { default as AlertDialogDescription } from './AlertDialogDescription.vue' +export { default as AlertDialogFooter } from './AlertDialogFooter.vue' +export { default as AlertDialogHeader } from './AlertDialogHeader.vue' +export { default as AlertDialogTitle } from './AlertDialogTitle.vue' +export { default as AlertDialogTrigger } from './AlertDialogTrigger.vue' diff --git a/app/components/pub/ui/alert/Alert.vue b/app/components/pub/ui/alert/Alert.vue new file mode 100644 index 00000000..f23fe2fa --- /dev/null +++ b/app/components/pub/ui/alert/Alert.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/alert/AlertDescription.vue b/app/components/pub/ui/alert/AlertDescription.vue new file mode 100644 index 00000000..2971a877 --- /dev/null +++ b/app/components/pub/ui/alert/AlertDescription.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/alert/AlertTitle.vue b/app/components/pub/ui/alert/AlertTitle.vue new file mode 100644 index 00000000..e28dd37e --- /dev/null +++ b/app/components/pub/ui/alert/AlertTitle.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/alert/index.ts b/app/components/pub/ui/alert/index.ts new file mode 100644 index 00000000..36bf919b --- /dev/null +++ b/app/components/pub/ui/alert/index.ts @@ -0,0 +1,24 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Alert } from './Alert.vue' +export { default as AlertDescription } from './AlertDescription.vue' +export { default as AlertTitle } from './AlertTitle.vue' + +export const alertVariants = cva( + 'relative w-full rounded-lg border px-4 py-3 text-sm [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground', + { + variants: { + variant: { + default: 'bg-background text-foreground', + destructive: + 'border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +) + +export type AlertVariants = VariantProps diff --git a/app/components/pub/ui/aspect-ratio/AspectRatio.vue b/app/components/pub/ui/aspect-ratio/AspectRatio.vue new file mode 100644 index 00000000..69ad8fef --- /dev/null +++ b/app/components/pub/ui/aspect-ratio/AspectRatio.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/aspect-ratio/index.ts b/app/components/pub/ui/aspect-ratio/index.ts new file mode 100644 index 00000000..3faf121c --- /dev/null +++ b/app/components/pub/ui/aspect-ratio/index.ts @@ -0,0 +1 @@ +export { default as AspectRatio } from './AspectRatio.vue' diff --git a/app/components/pub/ui/avatar/Avatar.vue b/app/components/pub/ui/avatar/Avatar.vue new file mode 100644 index 00000000..c6b9432e --- /dev/null +++ b/app/components/pub/ui/avatar/Avatar.vue @@ -0,0 +1,22 @@ + + + + + + + diff --git a/app/components/pub/ui/avatar/AvatarFallback.vue b/app/components/pub/ui/avatar/AvatarFallback.vue new file mode 100644 index 00000000..1ac23e62 --- /dev/null +++ b/app/components/pub/ui/avatar/AvatarFallback.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/avatar/AvatarImage.vue b/app/components/pub/ui/avatar/AvatarImage.vue new file mode 100644 index 00000000..6ef58f74 --- /dev/null +++ b/app/components/pub/ui/avatar/AvatarImage.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/app/components/pub/ui/avatar/index.ts b/app/components/pub/ui/avatar/index.ts new file mode 100644 index 00000000..d26e9112 --- /dev/null +++ b/app/components/pub/ui/avatar/index.ts @@ -0,0 +1,25 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Avatar } from './Avatar.vue' +export { default as AvatarFallback } from './AvatarFallback.vue' +export { default as AvatarImage } from './AvatarImage.vue' + +export const avatarVariant = cva( + 'inline-flex items-center justify-center font-normal text-foreground select-none shrink-0 bg-secondary overflow-hidden', + { + variants: { + size: { + sm: 'h-10 w-10 text-xs', + base: 'h-16 w-16 text-2xl', + lg: 'h-32 w-32 text-5xl', + }, + shape: { + circle: 'rounded-full', + square: 'rounded-md', + }, + }, + }, +) + +export type AvatarVariants = VariantProps diff --git a/app/components/pub/ui/badge/Badge.vue b/app/components/pub/ui/badge/Badge.vue new file mode 100644 index 00000000..c811fdbe --- /dev/null +++ b/app/components/pub/ui/badge/Badge.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/badge/index.ts b/app/components/pub/ui/badge/index.ts new file mode 100644 index 00000000..4f3e6d83 --- /dev/null +++ b/app/components/pub/ui/badge/index.ts @@ -0,0 +1,26 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Badge } from './Badge.vue' + +export const badgeVariants = cva( + 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + { + variants: { + variant: { + default: + 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80', + secondary: + 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80', + destructive: + 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80', + outline: 'text-foreground', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +) + +export type BadgeVariants = VariantProps diff --git a/app/components/pub/ui/breadcrumb/Breadcrumb.vue b/app/components/pub/ui/breadcrumb/Breadcrumb.vue new file mode 100644 index 00000000..72ca1437 --- /dev/null +++ b/app/components/pub/ui/breadcrumb/Breadcrumb.vue @@ -0,0 +1,13 @@ + + + + + + + diff --git a/app/components/pub/ui/breadcrumb/BreadcrumbEllipsis.vue b/app/components/pub/ui/breadcrumb/BreadcrumbEllipsis.vue new file mode 100644 index 00000000..cfccf9fe --- /dev/null +++ b/app/components/pub/ui/breadcrumb/BreadcrumbEllipsis.vue @@ -0,0 +1,22 @@ + + + + + + + + More + + diff --git a/app/components/pub/ui/breadcrumb/BreadcrumbItem.vue b/app/components/pub/ui/breadcrumb/BreadcrumbItem.vue new file mode 100644 index 00000000..42e721cd --- /dev/null +++ b/app/components/pub/ui/breadcrumb/BreadcrumbItem.vue @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/components/pub/ui/breadcrumb/BreadcrumbLink.vue b/app/components/pub/ui/breadcrumb/BreadcrumbLink.vue new file mode 100644 index 00000000..5d301fb8 --- /dev/null +++ b/app/components/pub/ui/breadcrumb/BreadcrumbLink.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/components/pub/ui/breadcrumb/BreadcrumbList.vue b/app/components/pub/ui/breadcrumb/BreadcrumbList.vue new file mode 100644 index 00000000..60856cc4 --- /dev/null +++ b/app/components/pub/ui/breadcrumb/BreadcrumbList.vue @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/components/pub/ui/breadcrumb/BreadcrumbPage.vue b/app/components/pub/ui/breadcrumb/BreadcrumbPage.vue new file mode 100644 index 00000000..fe43bda6 --- /dev/null +++ b/app/components/pub/ui/breadcrumb/BreadcrumbPage.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/breadcrumb/BreadcrumbSeparator.vue b/app/components/pub/ui/breadcrumb/BreadcrumbSeparator.vue new file mode 100644 index 00000000..8b56104b --- /dev/null +++ b/app/components/pub/ui/breadcrumb/BreadcrumbSeparator.vue @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/app/components/pub/ui/breadcrumb/index.ts b/app/components/pub/ui/breadcrumb/index.ts new file mode 100644 index 00000000..05909832 --- /dev/null +++ b/app/components/pub/ui/breadcrumb/index.ts @@ -0,0 +1,7 @@ +export { default as Breadcrumb } from './Breadcrumb.vue' +export { default as BreadcrumbEllipsis } from './BreadcrumbEllipsis.vue' +export { default as BreadcrumbItem } from './BreadcrumbItem.vue' +export { default as BreadcrumbLink } from './BreadcrumbLink.vue' +export { default as BreadcrumbList } from './BreadcrumbList.vue' +export { default as BreadcrumbPage } from './BreadcrumbPage.vue' +export { default as BreadcrumbSeparator } from './BreadcrumbSeparator.vue' diff --git a/app/components/pub/ui/button/Button.vue b/app/components/pub/ui/button/Button.vue new file mode 100644 index 00000000..1195f80f --- /dev/null +++ b/app/components/pub/ui/button/Button.vue @@ -0,0 +1,28 @@ + + + + + + + diff --git a/app/components/pub/ui/button/index.ts b/app/components/pub/ui/button/index.ts new file mode 100644 index 00000000..4a3a7eb4 --- /dev/null +++ b/app/components/pub/ui/button/index.ts @@ -0,0 +1,36 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Button } from './Button.vue' + +export const buttonVariants = cva( + 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90', + destructive: + 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', + outline: + 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', + secondary: + 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2', + xs: 'h-7 rounded px-2 text-xs', + sm: 'h-8 rounded-md px-3 text-xs', + lg: 'h-10 rounded-md px-8', + icon: 'h-9 w-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type ButtonVariants = VariantProps diff --git a/app/components/pub/ui/calendar/Calendar.vue b/app/components/pub/ui/calendar/Calendar.vue new file mode 100644 index 00000000..faf86ff6 --- /dev/null +++ b/app/components/pub/ui/calendar/Calendar.vue @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + {{ day }} + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarCell.vue b/app/components/pub/ui/calendar/CalendarCell.vue new file mode 100644 index 00000000..cfbfb88b --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarCell.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarCellTrigger.vue b/app/components/pub/ui/calendar/CalendarCellTrigger.vue new file mode 100644 index 00000000..b8ae8e53 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarCellTrigger.vue @@ -0,0 +1,40 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarGrid.vue b/app/components/pub/ui/calendar/CalendarGrid.vue new file mode 100644 index 00000000..9f8fa7f4 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarGrid.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarGridBody.vue b/app/components/pub/ui/calendar/CalendarGridBody.vue new file mode 100644 index 00000000..ab24c1e4 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarGridBody.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarGridHead.vue b/app/components/pub/ui/calendar/CalendarGridHead.vue new file mode 100644 index 00000000..2f3025d0 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarGridHead.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarGridRow.vue b/app/components/pub/ui/calendar/CalendarGridRow.vue new file mode 100644 index 00000000..5310a3c7 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarGridRow.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarHeadCell.vue b/app/components/pub/ui/calendar/CalendarHeadCell.vue new file mode 100644 index 00000000..95f773f8 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarHeadCell.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarHeader.vue b/app/components/pub/ui/calendar/CalendarHeader.vue new file mode 100644 index 00000000..50255fe2 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarHeader.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarHeading.vue b/app/components/pub/ui/calendar/CalendarHeading.vue new file mode 100644 index 00000000..ca5bfb58 --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarHeading.vue @@ -0,0 +1,29 @@ + + + + + + {{ headingValue }} + + + diff --git a/app/components/pub/ui/calendar/CalendarNextButton.vue b/app/components/pub/ui/calendar/CalendarNextButton.vue new file mode 100644 index 00000000..0297b15d --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarNextButton.vue @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/app/components/pub/ui/calendar/CalendarPrevButton.vue b/app/components/pub/ui/calendar/CalendarPrevButton.vue new file mode 100644 index 00000000..9cde027e --- /dev/null +++ b/app/components/pub/ui/calendar/CalendarPrevButton.vue @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/app/components/pub/ui/calendar/index.ts b/app/components/pub/ui/calendar/index.ts new file mode 100644 index 00000000..5239a1bd --- /dev/null +++ b/app/components/pub/ui/calendar/index.ts @@ -0,0 +1,12 @@ +export { default as Calendar } from './Calendar.vue' +export { default as CalendarCell } from './CalendarCell.vue' +export { default as CalendarCellTrigger } from './CalendarCellTrigger.vue' +export { default as CalendarGrid } from './CalendarGrid.vue' +export { default as CalendarGridBody } from './CalendarGridBody.vue' +export { default as CalendarGridHead } from './CalendarGridHead.vue' +export { default as CalendarGridRow } from './CalendarGridRow.vue' +export { default as CalendarHeadCell } from './CalendarHeadCell.vue' +export { default as CalendarHeader } from './CalendarHeader.vue' +export { default as CalendarHeading } from './CalendarHeading.vue' +export { default as CalendarNextButton } from './CalendarNextButton.vue' +export { default as CalendarPrevButton } from './CalendarPrevButton.vue' diff --git a/app/components/pub/ui/card/Card.vue b/app/components/pub/ui/card/Card.vue new file mode 100644 index 00000000..94b69033 --- /dev/null +++ b/app/components/pub/ui/card/Card.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/card/CardContent.vue b/app/components/pub/ui/card/CardContent.vue new file mode 100644 index 00000000..785913a1 --- /dev/null +++ b/app/components/pub/ui/card/CardContent.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/card/CardDescription.vue b/app/components/pub/ui/card/CardDescription.vue new file mode 100644 index 00000000..d5faedd5 --- /dev/null +++ b/app/components/pub/ui/card/CardDescription.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/card/CardFooter.vue b/app/components/pub/ui/card/CardFooter.vue new file mode 100644 index 00000000..1ed2efe5 --- /dev/null +++ b/app/components/pub/ui/card/CardFooter.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/card/CardHeader.vue b/app/components/pub/ui/card/CardHeader.vue new file mode 100644 index 00000000..951d227e --- /dev/null +++ b/app/components/pub/ui/card/CardHeader.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/card/CardTitle.vue b/app/components/pub/ui/card/CardTitle.vue new file mode 100644 index 00000000..fc302e25 --- /dev/null +++ b/app/components/pub/ui/card/CardTitle.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/app/components/pub/ui/card/index.ts b/app/components/pub/ui/card/index.ts new file mode 100644 index 00000000..9ff6d5e7 --- /dev/null +++ b/app/components/pub/ui/card/index.ts @@ -0,0 +1,6 @@ +export { default as Card } from './Card.vue' +export { default as CardContent } from './CardContent.vue' +export { default as CardDescription } from './CardDescription.vue' +export { default as CardFooter } from './CardFooter.vue' +export { default as CardHeader } from './CardHeader.vue' +export { default as CardTitle } from './CardTitle.vue' diff --git a/app/components/pub/ui/carousel/Carousel.vue b/app/components/pub/ui/carousel/Carousel.vue new file mode 100644 index 00000000..0a5551f1 --- /dev/null +++ b/app/components/pub/ui/carousel/Carousel.vue @@ -0,0 +1,44 @@ + + + + + + + diff --git a/app/components/pub/ui/carousel/CarouselContent.vue b/app/components/pub/ui/carousel/CarouselContent.vue new file mode 100644 index 00000000..6b40f14a --- /dev/null +++ b/app/components/pub/ui/carousel/CarouselContent.vue @@ -0,0 +1,29 @@ + + + + + + + + + diff --git a/app/components/pub/ui/carousel/CarouselItem.vue b/app/components/pub/ui/carousel/CarouselItem.vue new file mode 100644 index 00000000..9c168237 --- /dev/null +++ b/app/components/pub/ui/carousel/CarouselItem.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/carousel/CarouselNext.vue b/app/components/pub/ui/carousel/CarouselNext.vue new file mode 100644 index 00000000..687a5773 --- /dev/null +++ b/app/components/pub/ui/carousel/CarouselNext.vue @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/app/components/pub/ui/carousel/CarouselPrevious.vue b/app/components/pub/ui/carousel/CarouselPrevious.vue new file mode 100644 index 00000000..c8440e41 --- /dev/null +++ b/app/components/pub/ui/carousel/CarouselPrevious.vue @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/app/components/pub/ui/carousel/index.ts b/app/components/pub/ui/carousel/index.ts new file mode 100644 index 00000000..c37ad02d --- /dev/null +++ b/app/components/pub/ui/carousel/index.ts @@ -0,0 +1,10 @@ +export { default as Carousel } from './Carousel.vue' +export { default as CarouselContent } from './CarouselContent.vue' +export { default as CarouselItem } from './CarouselItem.vue' +export { default as CarouselNext } from './CarouselNext.vue' +export { default as CarouselPrevious } from './CarouselPrevious.vue' +export { useCarousel } from './useCarousel' + +export type { + EmblaCarouselType as CarouselApi, +} from 'embla-carousel' diff --git a/app/components/pub/ui/carousel/interface.ts b/app/components/pub/ui/carousel/interface.ts new file mode 100644 index 00000000..99c4f1a8 --- /dev/null +++ b/app/components/pub/ui/carousel/interface.ts @@ -0,0 +1,20 @@ +import type { + EmblaCarouselType as CarouselApi, + EmblaOptionsType as CarouselOptions, + EmblaPluginType as CarouselPlugin, +} from 'embla-carousel' +import type { HTMLAttributes, Ref } from 'vue' + +export interface CarouselProps { + opts?: CarouselOptions | Ref + plugins?: CarouselPlugin[] | Ref + orientation?: 'horizontal' | 'vertical' +} + +export interface CarouselEmits { + (e: 'init-api', payload: CarouselApi): void +} + +export interface WithClassAsProps { + class?: HTMLAttributes['class'] +} diff --git a/app/components/pub/ui/carousel/useCarousel.ts b/app/components/pub/ui/carousel/useCarousel.ts new file mode 100644 index 00000000..4fb58ddd --- /dev/null +++ b/app/components/pub/ui/carousel/useCarousel.ts @@ -0,0 +1,59 @@ +import type { + EmblaCarouselType as CarouselApi, +} from 'embla-carousel' +import type { CarouselEmits, CarouselProps } from './interface' +import { createInjectionState } from '@vueuse/core' +import emblaCarouselVue from 'embla-carousel-vue' +import { onMounted, ref } from 'vue' + +const [useProvideCarousel, useInjectCarousel] = createInjectionState( + ({ + opts, + orientation, + plugins, + }: CarouselProps, emits: CarouselEmits) => { + const [emblaNode, emblaApi] = emblaCarouselVue({ + ...opts, + axis: orientation === 'horizontal' ? 'x' : 'y', + }, plugins) + + function scrollPrev() { + emblaApi.value?.scrollPrev() + } + function scrollNext() { + emblaApi.value?.scrollNext() + } + + const canScrollNext = ref(true) + const canScrollPrev = ref(true) + + function onSelect(api: CarouselApi) { + canScrollNext.value = api.canScrollNext() + canScrollPrev.value = api.canScrollPrev() + } + + onMounted(() => { + if (!emblaApi.value) + return + + emblaApi.value?.on('init', onSelect) + emblaApi.value?.on('reInit', onSelect) + emblaApi.value?.on('select', onSelect) + + emits('init-api', emblaApi.value) + }) + + return { carouselRef: emblaNode, carouselApi: emblaApi, canScrollPrev, canScrollNext, scrollPrev, scrollNext, orientation } + }, +) + +function useCarousel() { + const carouselState = useInjectCarousel() + + if (!carouselState) + throw new Error('useCarousel must be used within a ') + + return carouselState +} + +export { useCarousel, useProvideCarousel } diff --git a/app/components/pub/ui/chart-area/AreaChart.vue b/app/components/pub/ui/chart-area/AreaChart.vue new file mode 100644 index 00000000..cf219519 --- /dev/null +++ b/app/components/pub/ui/chart-area/AreaChart.vue @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/chart-area/index.ts b/app/components/pub/ui/chart-area/index.ts new file mode 100644 index 00000000..2415a56c --- /dev/null +++ b/app/components/pub/ui/chart-area/index.ts @@ -0,0 +1,66 @@ +import type { Spacing } from '@unovis/ts' + +export { default as AreaChart } from './AreaChart.vue' + +type KeyOf> = Extract + +export interface BaseChartProps> { + /** + * The source data, in which each entry is a dictionary. + */ + data: T[] + /** + * Select the categories from your data. Used to populate the legend and toolip. + */ + categories: KeyOf[] + /** + * Sets the key to map the data to the axis. + */ + index: KeyOf + /** + * Change the default colors. + */ + colors?: string[] + /** + * Margin of each the container + */ + margin?: Spacing + /** + * Change the opacity of the non-selected field + * @default 0.2 + */ + filterOpacity?: number + /** + * Function to format X label + */ + xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Function to format Y label + */ + yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Controls the visibility of the X axis. + * @default true + */ + showXAxis?: boolean + /** + * Controls the visibility of the Y axis. + * @default true + */ + showYAxis?: boolean + /** + * Controls the visibility of tooltip. + * @default true + */ + showTooltip?: boolean + /** + * Controls the visibility of legend. + * @default true + */ + showLegend?: boolean + /** + * Controls the visibility of gridline. + * @default true + */ + showGridLine?: boolean +} diff --git a/app/components/pub/ui/chart-bar/BarChart.vue b/app/components/pub/ui/chart-bar/BarChart.vue new file mode 100644 index 00000000..b0d18b7e --- /dev/null +++ b/app/components/pub/ui/chart-bar/BarChart.vue @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/chart-bar/index.ts b/app/components/pub/ui/chart-bar/index.ts new file mode 100644 index 00000000..762f2ce3 --- /dev/null +++ b/app/components/pub/ui/chart-bar/index.ts @@ -0,0 +1,66 @@ +import type { Spacing } from '@unovis/ts' + +export { default as BarChart } from './BarChart.vue' + +type KeyOf> = Extract + +export interface BaseChartProps> { + /** + * The source data, in which each entry is a dictionary. + */ + data: T[] + /** + * Select the categories from your data. Used to populate the legend and toolip. + */ + categories: KeyOf[] + /** + * Sets the key to map the data to the axis. + */ + index: KeyOf + /** + * Change the default colors. + */ + colors?: string[] + /** + * Margin of each the container + */ + margin?: Spacing + /** + * Change the opacity of the non-selected field + * @default 0.2 + */ + filterOpacity?: number + /** + * Function to format X label + */ + xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Function to format Y label + */ + yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Controls the visibility of the X axis. + * @default true + */ + showXAxis?: boolean + /** + * Controls the visibility of the Y axis. + * @default true + */ + showYAxis?: boolean + /** + * Controls the visibility of tooltip. + * @default true + */ + showTooltip?: boolean + /** + * Controls the visibility of legend. + * @default true + */ + showLegend?: boolean + /** + * Controls the visibility of gridline. + * @default true + */ + showGridLine?: boolean +} diff --git a/app/components/pub/ui/chart-donut/DonutChart.vue b/app/components/pub/ui/chart-donut/DonutChart.vue new file mode 100644 index 00000000..ddf1889b --- /dev/null +++ b/app/components/pub/ui/chart-donut/DonutChart.vue @@ -0,0 +1,101 @@ + + + + + + + + + + + + + diff --git a/app/components/pub/ui/chart-donut/index.ts b/app/components/pub/ui/chart-donut/index.ts new file mode 100644 index 00000000..db2b49d0 --- /dev/null +++ b/app/components/pub/ui/chart-donut/index.ts @@ -0,0 +1,39 @@ +import type { Spacing } from '@unovis/ts' + +export { default as DonutChart } from './DonutChart.vue' + +type KeyOf> = Extract + +export interface BaseChartProps> { + /** + * The source data, in which each entry is a dictionary. + */ + data: T[] + /** + * Sets the key to map the data to the axis. + */ + index: KeyOf + /** + * Change the default colors. + */ + colors?: string[] + /** + * Margin of each the container + */ + margin?: Spacing + /** + * Change the opacity of the non-selected field + * @default 0.2 + */ + filterOpacity?: number + /** + * Controls the visibility of tooltip. + * @default true + */ + showTooltip?: boolean + /** + * Controls the visibility of legend. + * @default true + */ + showLegend?: boolean +} diff --git a/app/components/pub/ui/chart-line/LineChart.vue b/app/components/pub/ui/chart-line/LineChart.vue new file mode 100644 index 00000000..a269b2cb --- /dev/null +++ b/app/components/pub/ui/chart-line/LineChart.vue @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/chart-line/index.ts b/app/components/pub/ui/chart-line/index.ts new file mode 100644 index 00000000..1078d270 --- /dev/null +++ b/app/components/pub/ui/chart-line/index.ts @@ -0,0 +1,66 @@ +import type { Spacing } from '@unovis/ts' + +export { default as LineChart } from './LineChart.vue' + +type KeyOf> = Extract + +export interface BaseChartProps> { + /** + * The source data, in which each entry is a dictionary. + */ + data: T[] + /** + * Select the categories from your data. Used to populate the legend and toolip. + */ + categories: KeyOf[] + /** + * Sets the key to map the data to the axis. + */ + index: KeyOf + /** + * Change the default colors. + */ + colors?: string[] + /** + * Margin of each the container + */ + margin?: Spacing + /** + * Change the opacity of the non-selected field + * @default 0.2 + */ + filterOpacity?: number + /** + * Function to format X label + */ + xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Function to format Y label + */ + yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Controls the visibility of the X axis. + * @default true + */ + showXAxis?: boolean + /** + * Controls the visibility of the Y axis. + * @default true + */ + showYAxis?: boolean + /** + * Controls the visibility of tooltip. + * @default true + */ + showTooltip?: boolean + /** + * Controls the visibility of legend. + * @default true + */ + showLegend?: boolean + /** + * Controls the visibility of gridline. + * @default true + */ + showGridLine?: boolean +} diff --git a/app/components/pub/ui/chart/ChartCrosshair.vue b/app/components/pub/ui/chart/ChartCrosshair.vue new file mode 100644 index 00000000..f49600f6 --- /dev/null +++ b/app/components/pub/ui/chart/ChartCrosshair.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/app/components/pub/ui/chart/ChartLegend.vue b/app/components/pub/ui/chart/ChartLegend.vue new file mode 100644 index 00000000..225adc94 --- /dev/null +++ b/app/components/pub/ui/chart/ChartLegend.vue @@ -0,0 +1,50 @@ + + + + + + + diff --git a/app/components/pub/ui/chart/ChartSingleTooltip.vue b/app/components/pub/ui/chart/ChartSingleTooltip.vue new file mode 100644 index 00000000..17594762 --- /dev/null +++ b/app/components/pub/ui/chart/ChartSingleTooltip.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/app/components/pub/ui/chart/ChartTooltip.vue b/app/components/pub/ui/chart/ChartTooltip.vue new file mode 100644 index 00000000..24907f5f --- /dev/null +++ b/app/components/pub/ui/chart/ChartTooltip.vue @@ -0,0 +1,40 @@ + + + + + + + {{ title }} + + + + + + + + + + + {{ item.name }} + + {{ item.value }} + + + + diff --git a/app/components/pub/ui/chart/index.ts b/app/components/pub/ui/chart/index.ts new file mode 100644 index 00000000..7426ca17 --- /dev/null +++ b/app/components/pub/ui/chart/index.ts @@ -0,0 +1,18 @@ +export { default as ChartCrosshair } from './ChartCrosshair.vue' +export { default as ChartLegend } from './ChartLegend.vue' +export { default as ChartSingleTooltip } from './ChartSingleTooltip.vue' +export { default as ChartTooltip } from './ChartTooltip.vue' + +export function defaultColors(count: number = 3) { + const quotient = Math.floor(count / 2) + const remainder = count % 2 + + const primaryCount = quotient + remainder + const secondaryCount = quotient + return [ + ...Array.from(Array.from({ length: primaryCount }).keys()).map(i => `hsl(var(--primary) / ${1 - (1 / primaryCount) * i})`), + ...Array.from(Array.from({ length: secondaryCount }).keys()).map(i => `hsl(var(--vis-secondary-color) / ${1 - (1 / secondaryCount) * i})`), + ] +} + +export * from './interface' diff --git a/app/components/pub/ui/chart/interface.ts b/app/components/pub/ui/chart/interface.ts new file mode 100644 index 00000000..c3838afc --- /dev/null +++ b/app/components/pub/ui/chart/interface.ts @@ -0,0 +1,64 @@ +import type { Spacing } from '@unovis/ts' + +type KeyOf> = Extract + +export interface BaseChartProps> { + /** + * The source data, in which each entry is a dictionary. + */ + data: T[] + /** + * Select the categories from your data. Used to populate the legend and toolip. + */ + categories: KeyOf[] + /** + * Sets the key to map the data to the axis. + */ + index: KeyOf + /** + * Change the default colors. + */ + colors?: string[] + /** + * Margin of each the container + */ + margin?: Spacing + /** + * Change the opacity of the non-selected field + * @default 0.2 + */ + filterOpacity?: number + /** + * Function to format X label + */ + xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Function to format Y label + */ + yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string + /** + * Controls the visibility of the X axis. + * @default true + */ + showXAxis?: boolean + /** + * Controls the visibility of the Y axis. + * @default true + */ + showYAxis?: boolean + /** + * Controls the visibility of tooltip. + * @default true + */ + showTooltip?: boolean + /** + * Controls the visibility of legend. + * @default true + */ + showLegend?: boolean + /** + * Controls the visibility of gridline. + * @default true + */ + showGridLine?: boolean +} diff --git a/app/components/pub/ui/checkbox/Checkbox.vue b/app/components/pub/ui/checkbox/Checkbox.vue new file mode 100644 index 00000000..c846eae0 --- /dev/null +++ b/app/components/pub/ui/checkbox/Checkbox.vue @@ -0,0 +1,33 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/checkbox/index.ts b/app/components/pub/ui/checkbox/index.ts new file mode 100644 index 00000000..8c28c286 --- /dev/null +++ b/app/components/pub/ui/checkbox/index.ts @@ -0,0 +1 @@ +export { default as Checkbox } from './Checkbox.vue' diff --git a/app/components/pub/ui/collapsible/Collapsible.vue b/app/components/pub/ui/collapsible/Collapsible.vue new file mode 100644 index 00000000..fae7919c --- /dev/null +++ b/app/components/pub/ui/collapsible/Collapsible.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/collapsible/CollapsibleContent.vue b/app/components/pub/ui/collapsible/CollapsibleContent.vue new file mode 100644 index 00000000..5c82af24 --- /dev/null +++ b/app/components/pub/ui/collapsible/CollapsibleContent.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/collapsible/CollapsibleTrigger.vue b/app/components/pub/ui/collapsible/CollapsibleTrigger.vue new file mode 100644 index 00000000..e3074994 --- /dev/null +++ b/app/components/pub/ui/collapsible/CollapsibleTrigger.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/collapsible/index.ts b/app/components/pub/ui/collapsible/index.ts new file mode 100644 index 00000000..abab9567 --- /dev/null +++ b/app/components/pub/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/app/components/pub/ui/command/Command.vue b/app/components/pub/ui/command/Command.vue new file mode 100644 index 00000000..dda41937 --- /dev/null +++ b/app/components/pub/ui/command/Command.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/app/components/pub/ui/command/CommandDialog.vue b/app/components/pub/ui/command/CommandDialog.vue new file mode 100644 index 00000000..efe417df --- /dev/null +++ b/app/components/pub/ui/command/CommandDialog.vue @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/command/CommandEmpty.vue b/app/components/pub/ui/command/CommandEmpty.vue new file mode 100644 index 00000000..21368efa --- /dev/null +++ b/app/components/pub/ui/command/CommandEmpty.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/command/CommandGroup.vue b/app/components/pub/ui/command/CommandGroup.vue new file mode 100644 index 00000000..eaca02de --- /dev/null +++ b/app/components/pub/ui/command/CommandGroup.vue @@ -0,0 +1,30 @@ + + + + + + {{ heading }} + + + + diff --git a/app/components/pub/ui/command/CommandInput.vue b/app/components/pub/ui/command/CommandInput.vue new file mode 100644 index 00000000..e2e2b1d0 --- /dev/null +++ b/app/components/pub/ui/command/CommandInput.vue @@ -0,0 +1,35 @@ + + + + + + + + diff --git a/app/components/pub/ui/command/CommandItem.vue b/app/components/pub/ui/command/CommandItem.vue new file mode 100644 index 00000000..adca1fef --- /dev/null +++ b/app/components/pub/ui/command/CommandItem.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/components/pub/ui/command/CommandList.vue b/app/components/pub/ui/command/CommandList.vue new file mode 100644 index 00000000..d540cf08 --- /dev/null +++ b/app/components/pub/ui/command/CommandList.vue @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/app/components/pub/ui/command/CommandSeparator.vue b/app/components/pub/ui/command/CommandSeparator.vue new file mode 100644 index 00000000..9000939f --- /dev/null +++ b/app/components/pub/ui/command/CommandSeparator.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/command/CommandShortcut.vue b/app/components/pub/ui/command/CommandShortcut.vue new file mode 100644 index 00000000..0d4da921 --- /dev/null +++ b/app/components/pub/ui/command/CommandShortcut.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/command/index.ts b/app/components/pub/ui/command/index.ts new file mode 100644 index 00000000..0e35f4b9 --- /dev/null +++ b/app/components/pub/ui/command/index.ts @@ -0,0 +1,9 @@ +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' diff --git a/app/components/pub/ui/context-menu/ContextMenu.vue b/app/components/pub/ui/context-menu/ContextMenu.vue new file mode 100644 index 00000000..363e9c6b --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenu.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuCheckboxItem.vue b/app/components/pub/ui/context-menu/ContextMenuCheckboxItem.vue new file mode 100644 index 00000000..62f6c481 --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuCheckboxItem.vue @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuContent.vue b/app/components/pub/ui/context-menu/ContextMenuContent.vue new file mode 100644 index 00000000..651d3b26 --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuContent.vue @@ -0,0 +1,37 @@ + + + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuGroup.vue b/app/components/pub/ui/context-menu/ContextMenuGroup.vue new file mode 100644 index 00000000..4dda085d --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuGroup.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuItem.vue b/app/components/pub/ui/context-menu/ContextMenuItem.vue new file mode 100644 index 00000000..1773330c --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuItem.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuLabel.vue b/app/components/pub/ui/context-menu/ContextMenuLabel.vue new file mode 100644 index 00000000..5ad9742a --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuLabel.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuPortal.vue b/app/components/pub/ui/context-menu/ContextMenuPortal.vue new file mode 100644 index 00000000..28e2192d --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuPortal.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuRadioGroup.vue b/app/components/pub/ui/context-menu/ContextMenuRadioGroup.vue new file mode 100644 index 00000000..a40feffb --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuRadioGroup.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuRadioItem.vue b/app/components/pub/ui/context-menu/ContextMenuRadioItem.vue new file mode 100644 index 00000000..05ff7bde --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuRadioItem.vue @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuSeparator.vue b/app/components/pub/ui/context-menu/ContextMenuSeparator.vue new file mode 100644 index 00000000..c03377f9 --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuSeparator.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuShortcut.vue b/app/components/pub/ui/context-menu/ContextMenuShortcut.vue new file mode 100644 index 00000000..0d4da921 --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuShortcut.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuSub.vue b/app/components/pub/ui/context-menu/ContextMenuSub.vue new file mode 100644 index 00000000..0d3c61db --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuSub.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuSubContent.vue b/app/components/pub/ui/context-menu/ContextMenuSubContent.vue new file mode 100644 index 00000000..2d7adb69 --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuSubContent.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuSubTrigger.vue b/app/components/pub/ui/context-menu/ContextMenuSubTrigger.vue new file mode 100644 index 00000000..77eeb378 --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuSubTrigger.vue @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/app/components/pub/ui/context-menu/ContextMenuTrigger.vue b/app/components/pub/ui/context-menu/ContextMenuTrigger.vue new file mode 100644 index 00000000..136ee589 --- /dev/null +++ b/app/components/pub/ui/context-menu/ContextMenuTrigger.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/context-menu/index.ts b/app/components/pub/ui/context-menu/index.ts new file mode 100644 index 00000000..3ed59e63 --- /dev/null +++ b/app/components/pub/ui/context-menu/index.ts @@ -0,0 +1,14 @@ +export { default as ContextMenu } from './ContextMenu.vue' +export { default as ContextMenuCheckboxItem } from './ContextMenuCheckboxItem.vue' +export { default as ContextMenuContent } from './ContextMenuContent.vue' +export { default as ContextMenuGroup } from './ContextMenuGroup.vue' +export { default as ContextMenuItem } from './ContextMenuItem.vue' +export { default as ContextMenuLabel } from './ContextMenuLabel.vue' +export { default as ContextMenuRadioGroup } from './ContextMenuRadioGroup.vue' +export { default as ContextMenuRadioItem } from './ContextMenuRadioItem.vue' +export { default as ContextMenuSeparator } from './ContextMenuSeparator.vue' +export { default as ContextMenuShortcut } from './ContextMenuShortcut.vue' +export { default as ContextMenuSub } from './ContextMenuSub.vue' +export { default as ContextMenuSubContent } from './ContextMenuSubContent.vue' +export { default as ContextMenuSubTrigger } from './ContextMenuSubTrigger.vue' +export { default as ContextMenuTrigger } from './ContextMenuTrigger.vue' diff --git a/app/components/pub/ui/dialog/Dialog.vue b/app/components/pub/ui/dialog/Dialog.vue new file mode 100644 index 00000000..5f6a5632 --- /dev/null +++ b/app/components/pub/ui/dialog/Dialog.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/dialog/DialogClose.vue b/app/components/pub/ui/dialog/DialogClose.vue new file mode 100644 index 00000000..1fa61805 --- /dev/null +++ b/app/components/pub/ui/dialog/DialogClose.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/dialog/DialogContent.vue b/app/components/pub/ui/dialog/DialogContent.vue new file mode 100644 index 00000000..bb1842bb --- /dev/null +++ b/app/components/pub/ui/dialog/DialogContent.vue @@ -0,0 +1,51 @@ + + + + + + + + + + + Close + + + + diff --git a/app/components/pub/ui/dialog/DialogDescription.vue b/app/components/pub/ui/dialog/DialogDescription.vue new file mode 100644 index 00000000..373381e0 --- /dev/null +++ b/app/components/pub/ui/dialog/DialogDescription.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/dialog/DialogFooter.vue b/app/components/pub/ui/dialog/DialogFooter.vue new file mode 100644 index 00000000..ac2d0c18 --- /dev/null +++ b/app/components/pub/ui/dialog/DialogFooter.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/dialog/DialogHeader.vue b/app/components/pub/ui/dialog/DialogHeader.vue new file mode 100644 index 00000000..b2c9085d --- /dev/null +++ b/app/components/pub/ui/dialog/DialogHeader.vue @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/components/pub/ui/dialog/DialogScrollContent.vue b/app/components/pub/ui/dialog/DialogScrollContent.vue new file mode 100644 index 00000000..15a2031e --- /dev/null +++ b/app/components/pub/ui/dialog/DialogScrollContent.vue @@ -0,0 +1,60 @@ + + + + + + { + const originalEvent = event.detail.originalEvent; + const target = originalEvent.target as HTMLElement; + if (originalEvent.offsetX > target.clientWidth || originalEvent.offsetY > target.clientHeight) { + event.preventDefault(); + } + }" + > + + + + + Close + + + + + diff --git a/app/components/pub/ui/dialog/DialogTitle.vue b/app/components/pub/ui/dialog/DialogTitle.vue new file mode 100644 index 00000000..d815c4b1 --- /dev/null +++ b/app/components/pub/ui/dialog/DialogTitle.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/app/components/pub/ui/dialog/DialogTrigger.vue b/app/components/pub/ui/dialog/DialogTrigger.vue new file mode 100644 index 00000000..b966b29d --- /dev/null +++ b/app/components/pub/ui/dialog/DialogTrigger.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/dialog/index.ts b/app/components/pub/ui/dialog/index.ts new file mode 100644 index 00000000..ca8cfeae --- /dev/null +++ b/app/components/pub/ui/dialog/index.ts @@ -0,0 +1,9 @@ +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 DialogScrollContent } from './DialogScrollContent.vue' +export { default as DialogTitle } from './DialogTitle.vue' +export { default as DialogTrigger } from './DialogTrigger.vue' diff --git a/app/components/pub/ui/drawer/Drawer.vue b/app/components/pub/ui/drawer/Drawer.vue new file mode 100644 index 00000000..8be66568 --- /dev/null +++ b/app/components/pub/ui/drawer/Drawer.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/drawer/DrawerContent.vue b/app/components/pub/ui/drawer/DrawerContent.vue new file mode 100644 index 00000000..9639a6f3 --- /dev/null +++ b/app/components/pub/ui/drawer/DrawerContent.vue @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/drawer/DrawerDescription.vue b/app/components/pub/ui/drawer/DrawerDescription.vue new file mode 100644 index 00000000..33c01401 --- /dev/null +++ b/app/components/pub/ui/drawer/DrawerDescription.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/drawer/DrawerFooter.vue b/app/components/pub/ui/drawer/DrawerFooter.vue new file mode 100644 index 00000000..1eb35278 --- /dev/null +++ b/app/components/pub/ui/drawer/DrawerFooter.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/drawer/DrawerHeader.vue b/app/components/pub/ui/drawer/DrawerHeader.vue new file mode 100644 index 00000000..ecef7a67 --- /dev/null +++ b/app/components/pub/ui/drawer/DrawerHeader.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/drawer/DrawerOverlay.vue b/app/components/pub/ui/drawer/DrawerOverlay.vue new file mode 100644 index 00000000..bda38ce2 --- /dev/null +++ b/app/components/pub/ui/drawer/DrawerOverlay.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/app/components/pub/ui/drawer/DrawerTitle.vue b/app/components/pub/ui/drawer/DrawerTitle.vue new file mode 100644 index 00000000..04d48646 --- /dev/null +++ b/app/components/pub/ui/drawer/DrawerTitle.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/drawer/index.ts b/app/components/pub/ui/drawer/index.ts new file mode 100644 index 00000000..d41b7928 --- /dev/null +++ b/app/components/pub/ui/drawer/index.ts @@ -0,0 +1,8 @@ +export { default as Drawer } from './Drawer.vue' +export { default as DrawerContent } from './DrawerContent.vue' +export { default as DrawerDescription } from './DrawerDescription.vue' +export { default as DrawerFooter } from './DrawerFooter.vue' +export { default as DrawerHeader } from './DrawerHeader.vue' +export { default as DrawerOverlay } from './DrawerOverlay.vue' +export { default as DrawerTitle } from './DrawerTitle.vue' +export { DrawerClose, DrawerPortal, DrawerTrigger } from 'vaul-vue' diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenu.vue b/app/components/pub/ui/dropdown-menu/DropdownMenu.vue new file mode 100644 index 00000000..c9e77fe7 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 00000000..12d948a2 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuContent.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 00000000..95e82df6 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuGroup.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 00000000..e9711764 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuItem.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 00000000..234cbc87 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,30 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuLabel.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 00000000..156e28ca --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 00000000..c21b27a8 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuRadioItem.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 00000000..db5b802d --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,42 @@ + + + + + + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuSeparator.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 00000000..6bb639e1 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuShortcut.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 00000000..abaeda64 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuSub.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 00000000..af6bac43 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuSubContent.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 00000000..0cba446a --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 00000000..fdb058e7 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,35 @@ + + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/DropdownMenuTrigger.vue b/app/components/pub/ui/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 00000000..baf0f7c0 --- /dev/null +++ b/app/components/pub/ui/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/dropdown-menu/index.ts b/app/components/pub/ui/dropdown-menu/index.ts new file mode 100644 index 00000000..6011f35c --- /dev/null +++ b/app/components/pub/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 'radix-vue' diff --git a/app/components/pub/ui/form/FormControl.vue b/app/components/pub/ui/form/FormControl.vue new file mode 100644 index 00000000..ca813eab --- /dev/null +++ b/app/components/pub/ui/form/FormControl.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/form/FormDescription.vue b/app/components/pub/ui/form/FormDescription.vue new file mode 100644 index 00000000..93000660 --- /dev/null +++ b/app/components/pub/ui/form/FormDescription.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/components/pub/ui/form/FormItem.vue b/app/components/pub/ui/form/FormItem.vue new file mode 100644 index 00000000..a4c1e8df --- /dev/null +++ b/app/components/pub/ui/form/FormItem.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/form/FormLabel.vue b/app/components/pub/ui/form/FormLabel.vue new file mode 100644 index 00000000..05a51929 --- /dev/null +++ b/app/components/pub/ui/form/FormLabel.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/form/FormMessage.vue b/app/components/pub/ui/form/FormMessage.vue new file mode 100644 index 00000000..98dd4fc7 --- /dev/null +++ b/app/components/pub/ui/form/FormMessage.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/app/components/pub/ui/form/index.ts b/app/components/pub/ui/form/index.ts new file mode 100644 index 00000000..1a3be118 --- /dev/null +++ b/app/components/pub/ui/form/index.ts @@ -0,0 +1,7 @@ +export { default as FormControl } from './FormControl.vue' +export { default as FormDescription } from './FormDescription.vue' +export { default as FormItem } from './FormItem.vue' +export { default as FormLabel } from './FormLabel.vue' +export { default as FormMessage } from './FormMessage.vue' +export { FORM_ITEM_INJECTION_KEY } from './injectionKeys' +export { Form, Field as FormField, FieldArray as FormFieldArray } from 'vee-validate' diff --git a/app/components/pub/ui/form/injectionKeys.ts b/app/components/pub/ui/form/injectionKeys.ts new file mode 100644 index 00000000..5b9ee8f6 --- /dev/null +++ b/app/components/pub/ui/form/injectionKeys.ts @@ -0,0 +1,3 @@ +import type { InjectionKey } from 'vue' + +export const FORM_ITEM_INJECTION_KEY = Symbol('id') as InjectionKey diff --git a/app/components/pub/ui/form/useFormField.ts b/app/components/pub/ui/form/useFormField.ts new file mode 100644 index 00000000..2da133b8 --- /dev/null +++ b/app/components/pub/ui/form/useFormField.ts @@ -0,0 +1,29 @@ +import { FieldContextKey, useFieldError, useIsFieldDirty, useIsFieldTouched, useIsFieldValid } from 'vee-validate' +import { inject } from 'vue' +import { FORM_ITEM_INJECTION_KEY } from './injectionKeys' + +export function useFormField() { + const fieldContext = inject(FieldContextKey) + const fieldItemContext = inject(FORM_ITEM_INJECTION_KEY) + const fieldState = { + valid: useIsFieldValid(), + isDirty: useIsFieldDirty(), + isTouched: useIsFieldTouched(), + error: useFieldError(), + } + + if (!fieldContext) + throw new Error('useFormField should be used within ') + + const { name } = fieldContext + const id = fieldItemContext + + return { + id, + name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } +} diff --git a/app/components/pub/ui/hover-card/HoverCard.vue b/app/components/pub/ui/hover-card/HoverCard.vue new file mode 100644 index 00000000..ef13ea57 --- /dev/null +++ b/app/components/pub/ui/hover-card/HoverCard.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/hover-card/HoverCardContent.vue b/app/components/pub/ui/hover-card/HoverCardContent.vue new file mode 100644 index 00000000..f35e3809 --- /dev/null +++ b/app/components/pub/ui/hover-card/HoverCardContent.vue @@ -0,0 +1,43 @@ + + + + + + + + + diff --git a/app/components/pub/ui/hover-card/HoverCardTrigger.vue b/app/components/pub/ui/hover-card/HoverCardTrigger.vue new file mode 100644 index 00000000..b3907564 --- /dev/null +++ b/app/components/pub/ui/hover-card/HoverCardTrigger.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/hover-card/index.ts b/app/components/pub/ui/hover-card/index.ts new file mode 100644 index 00000000..9e4ccc2a --- /dev/null +++ b/app/components/pub/ui/hover-card/index.ts @@ -0,0 +1,3 @@ +export { default as HoverCard } from './HoverCard.vue' +export { default as HoverCardContent } from './HoverCardContent.vue' +export { default as HoverCardTrigger } from './HoverCardTrigger.vue' diff --git a/app/components/pub/ui/input/Input.vue b/app/components/pub/ui/input/Input.vue new file mode 100644 index 00000000..81140b40 --- /dev/null +++ b/app/components/pub/ui/input/Input.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/app/components/pub/ui/input/index.ts b/app/components/pub/ui/input/index.ts new file mode 100644 index 00000000..a691dd6c --- /dev/null +++ b/app/components/pub/ui/input/index.ts @@ -0,0 +1 @@ +export { default as Input } from './Input.vue' diff --git a/app/components/pub/ui/label/Label.vue b/app/components/pub/ui/label/Label.vue new file mode 100644 index 00000000..04232226 --- /dev/null +++ b/app/components/pub/ui/label/Label.vue @@ -0,0 +1,29 @@ + + + + + + + diff --git a/app/components/pub/ui/label/index.ts b/app/components/pub/ui/label/index.ts new file mode 100644 index 00000000..572c2f01 --- /dev/null +++ b/app/components/pub/ui/label/index.ts @@ -0,0 +1 @@ +export { default as Label } from './Label.vue' diff --git a/app/components/pub/ui/menubar/Menubar.vue b/app/components/pub/ui/menubar/Menubar.vue new file mode 100644 index 00000000..614a545f --- /dev/null +++ b/app/components/pub/ui/menubar/Menubar.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarCheckboxItem.vue b/app/components/pub/ui/menubar/MenubarCheckboxItem.vue new file mode 100644 index 00000000..f566f317 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarCheckboxItem.vue @@ -0,0 +1,40 @@ + + + + + + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarContent.vue b/app/components/pub/ui/menubar/MenubarContent.vue new file mode 100644 index 00000000..d1de1ae9 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarContent.vue @@ -0,0 +1,45 @@ + + + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarGroup.vue b/app/components/pub/ui/menubar/MenubarGroup.vue new file mode 100644 index 00000000..e2e79d92 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarGroup.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarItem.vue b/app/components/pub/ui/menubar/MenubarItem.vue new file mode 100644 index 00000000..e1457d60 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarItem.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarLabel.vue b/app/components/pub/ui/menubar/MenubarLabel.vue new file mode 100644 index 00000000..34089911 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarLabel.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarMenu.vue b/app/components/pub/ui/menubar/MenubarMenu.vue new file mode 100644 index 00000000..3e0bc452 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarMenu.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarRadioGroup.vue b/app/components/pub/ui/menubar/MenubarRadioGroup.vue new file mode 100644 index 00000000..0bc7a0a6 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarRadioGroup.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarRadioItem.vue b/app/components/pub/ui/menubar/MenubarRadioItem.vue new file mode 100644 index 00000000..a4d72455 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarRadioItem.vue @@ -0,0 +1,40 @@ + + + + + + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarSeparator.vue b/app/components/pub/ui/menubar/MenubarSeparator.vue new file mode 100644 index 00000000..6850518e --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarSeparator.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/app/components/pub/ui/menubar/MenubarShortcut.vue b/app/components/pub/ui/menubar/MenubarShortcut.vue new file mode 100644 index 00000000..0d4da921 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarShortcut.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarSub.vue b/app/components/pub/ui/menubar/MenubarSub.vue new file mode 100644 index 00000000..f1c8395d --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarSub.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarSubContent.vue b/app/components/pub/ui/menubar/MenubarSubContent.vue new file mode 100644 index 00000000..5986c7d9 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarSubContent.vue @@ -0,0 +1,40 @@ + + + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarSubTrigger.vue b/app/components/pub/ui/menubar/MenubarSubTrigger.vue new file mode 100644 index 00000000..7bdbec92 --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarSubTrigger.vue @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/app/components/pub/ui/menubar/MenubarTrigger.vue b/app/components/pub/ui/menubar/MenubarTrigger.vue new file mode 100644 index 00000000..7538fe7a --- /dev/null +++ b/app/components/pub/ui/menubar/MenubarTrigger.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/app/components/pub/ui/menubar/index.ts b/app/components/pub/ui/menubar/index.ts new file mode 100644 index 00000000..600c23ea --- /dev/null +++ b/app/components/pub/ui/menubar/index.ts @@ -0,0 +1,15 @@ +export { default as Menubar } from './Menubar.vue' +export { default as MenubarCheckboxItem } from './MenubarCheckboxItem.vue' +export { default as MenubarContent } from './MenubarContent.vue' +export { default as MenubarGroup } from './MenubarGroup.vue' +export { default as MenubarItem } from './MenubarItem.vue' +export { default as MenubarLabel } from './MenubarLabel.vue' +export { default as MenubarMenu } from './MenubarMenu.vue' +export { default as MenubarRadioGroup } from './MenubarRadioGroup.vue' +export { default as MenubarRadioItem } from './MenubarRadioItem.vue' +export { default as MenubarSeparator } from './MenubarSeparator.vue' +export { default as MenubarShortcut } from './MenubarShortcut.vue' +export { default as MenubarSub } from './MenubarSub.vue' +export { default as MenubarSubContent } from './MenubarSubContent.vue' +export { default as MenubarSubTrigger } from './MenubarSubTrigger.vue' +export { default as MenubarTrigger } from './MenubarTrigger.vue' diff --git a/app/components/pub/ui/navigation-menu/NavigationMenu.vue b/app/components/pub/ui/navigation-menu/NavigationMenu.vue new file mode 100644 index 00000000..f7fc216c --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenu.vue @@ -0,0 +1,34 @@ + + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/NavigationMenuContent.vue b/app/components/pub/ui/navigation-menu/NavigationMenuContent.vue new file mode 100644 index 00000000..e6b5060f --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenuContent.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/NavigationMenuIndicator.vue b/app/components/pub/ui/navigation-menu/NavigationMenuIndicator.vue new file mode 100644 index 00000000..018c0868 --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenuIndicator.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/NavigationMenuItem.vue b/app/components/pub/ui/navigation-menu/NavigationMenuItem.vue new file mode 100644 index 00000000..09e26ca2 --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenuItem.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/NavigationMenuLink.vue b/app/components/pub/ui/navigation-menu/NavigationMenuLink.vue new file mode 100644 index 00000000..4179154d --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenuLink.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/NavigationMenuList.vue b/app/components/pub/ui/navigation-menu/NavigationMenuList.vue new file mode 100644 index 00000000..7275908c --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenuList.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/NavigationMenuTrigger.vue b/app/components/pub/ui/navigation-menu/NavigationMenuTrigger.vue new file mode 100644 index 00000000..c15f094d --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenuTrigger.vue @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/NavigationMenuViewport.vue b/app/components/pub/ui/navigation-menu/NavigationMenuViewport.vue new file mode 100644 index 00000000..b6cdfc54 --- /dev/null +++ b/app/components/pub/ui/navigation-menu/NavigationMenuViewport.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/app/components/pub/ui/navigation-menu/index.ts b/app/components/pub/ui/navigation-menu/index.ts new file mode 100644 index 00000000..fd0ef971 --- /dev/null +++ b/app/components/pub/ui/navigation-menu/index.ts @@ -0,0 +1,12 @@ +import { cva } from 'class-variance-authority' + +export { default as NavigationMenu } from './NavigationMenu.vue' +export { default as NavigationMenuContent } from './NavigationMenuContent.vue' +export { default as NavigationMenuItem } from './NavigationMenuItem.vue' +export { default as NavigationMenuLink } from './NavigationMenuLink.vue' +export { default as NavigationMenuList } from './NavigationMenuList.vue' +export { default as NavigationMenuTrigger } from './NavigationMenuTrigger.vue' + +export const navigationMenuTriggerStyle = cva( + 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50', +) diff --git a/app/components/pub/ui/number-field/NumberField.vue b/app/components/pub/ui/number-field/NumberField.vue new file mode 100644 index 00000000..020ea0bc --- /dev/null +++ b/app/components/pub/ui/number-field/NumberField.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/number-field/NumberFieldContent.vue b/app/components/pub/ui/number-field/NumberFieldContent.vue new file mode 100644 index 00000000..12c8d7ed --- /dev/null +++ b/app/components/pub/ui/number-field/NumberFieldContent.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/number-field/NumberFieldDecrement.vue b/app/components/pub/ui/number-field/NumberFieldDecrement.vue new file mode 100644 index 00000000..77fe4586 --- /dev/null +++ b/app/components/pub/ui/number-field/NumberFieldDecrement.vue @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/components/pub/ui/number-field/NumberFieldIncrement.vue b/app/components/pub/ui/number-field/NumberFieldIncrement.vue new file mode 100644 index 00000000..e4e12f24 --- /dev/null +++ b/app/components/pub/ui/number-field/NumberFieldIncrement.vue @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/components/pub/ui/number-field/NumberFieldInput.vue b/app/components/pub/ui/number-field/NumberFieldInput.vue new file mode 100644 index 00000000..2d91d9ed --- /dev/null +++ b/app/components/pub/ui/number-field/NumberFieldInput.vue @@ -0,0 +1,8 @@ + + + + + diff --git a/app/components/pub/ui/number-field/index.ts b/app/components/pub/ui/number-field/index.ts new file mode 100644 index 00000000..5489697d --- /dev/null +++ b/app/components/pub/ui/number-field/index.ts @@ -0,0 +1,5 @@ +export { default as NumberField } from './NumberField.vue' +export { default as NumberFieldContent } from './NumberFieldContent.vue' +export { default as NumberFieldDecrement } from './NumberFieldDecrement.vue' +export { default as NumberFieldIncrement } from './NumberFieldIncrement.vue' +export { default as NumberFieldInput } from './NumberFieldInput.vue' diff --git a/app/components/pub/ui/pagination/PaginationEllipsis.vue b/app/components/pub/ui/pagination/PaginationEllipsis.vue new file mode 100644 index 00000000..b26177c9 --- /dev/null +++ b/app/components/pub/ui/pagination/PaginationEllipsis.vue @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/app/components/pub/ui/pagination/PaginationFirst.vue b/app/components/pub/ui/pagination/PaginationFirst.vue new file mode 100644 index 00000000..af1caf2b --- /dev/null +++ b/app/components/pub/ui/pagination/PaginationFirst.vue @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/pagination/PaginationLast.vue b/app/components/pub/ui/pagination/PaginationLast.vue new file mode 100644 index 00000000..fc4cea8d --- /dev/null +++ b/app/components/pub/ui/pagination/PaginationLast.vue @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/pagination/PaginationNext.vue b/app/components/pub/ui/pagination/PaginationNext.vue new file mode 100644 index 00000000..24203dfb --- /dev/null +++ b/app/components/pub/ui/pagination/PaginationNext.vue @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/pagination/PaginationPrev.vue b/app/components/pub/ui/pagination/PaginationPrev.vue new file mode 100644 index 00000000..81fe1be0 --- /dev/null +++ b/app/components/pub/ui/pagination/PaginationPrev.vue @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/pagination/index.ts b/app/components/pub/ui/pagination/index.ts new file mode 100644 index 00000000..3a0b1817 --- /dev/null +++ b/app/components/pub/ui/pagination/index.ts @@ -0,0 +1,10 @@ +export { default as PaginationEllipsis } from './PaginationEllipsis.vue' +export { default as PaginationFirst } from './PaginationFirst.vue' +export { default as PaginationLast } from './PaginationLast.vue' +export { default as PaginationNext } from './PaginationNext.vue' +export { default as PaginationPrev } from './PaginationPrev.vue' +export { + PaginationRoot as Pagination, + PaginationList, + PaginationListItem, +} from 'radix-vue' diff --git a/app/components/pub/ui/pin-input/PinInput.vue b/app/components/pub/ui/pin-input/PinInput.vue new file mode 100644 index 00000000..1152b78b --- /dev/null +++ b/app/components/pub/ui/pin-input/PinInput.vue @@ -0,0 +1,25 @@ + + + + + + + diff --git a/app/components/pub/ui/pin-input/PinInputGroup.vue b/app/components/pub/ui/pin-input/PinInputGroup.vue new file mode 100644 index 00000000..7b008a5f --- /dev/null +++ b/app/components/pub/ui/pin-input/PinInputGroup.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/components/pub/ui/pin-input/PinInputInput.vue b/app/components/pub/ui/pin-input/PinInputInput.vue new file mode 100644 index 00000000..5091e777 --- /dev/null +++ b/app/components/pub/ui/pin-input/PinInputInput.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/app/components/pub/ui/pin-input/PinInputSeparator.vue b/app/components/pub/ui/pin-input/PinInputSeparator.vue new file mode 100644 index 00000000..2ffeb810 --- /dev/null +++ b/app/components/pub/ui/pin-input/PinInputSeparator.vue @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/app/components/pub/ui/pin-input/index.ts b/app/components/pub/ui/pin-input/index.ts new file mode 100644 index 00000000..e645e414 --- /dev/null +++ b/app/components/pub/ui/pin-input/index.ts @@ -0,0 +1,4 @@ +export { default as PinInput } from './PinInput.vue' +export { default as PinInputGroup } from './PinInputGroup.vue' +export { default as PinInputInput } from './PinInputInput.vue' +export { default as PinInputSeparator } from './PinInputSeparator.vue' diff --git a/app/components/pub/ui/popover/Popover.vue b/app/components/pub/ui/popover/Popover.vue new file mode 100644 index 00000000..da5f7096 --- /dev/null +++ b/app/components/pub/ui/popover/Popover.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/popover/PopoverContent.vue b/app/components/pub/ui/popover/PopoverContent.vue new file mode 100644 index 00000000..665efa30 --- /dev/null +++ b/app/components/pub/ui/popover/PopoverContent.vue @@ -0,0 +1,49 @@ + + + + + + + + + diff --git a/app/components/pub/ui/popover/PopoverTrigger.vue b/app/components/pub/ui/popover/PopoverTrigger.vue new file mode 100644 index 00000000..6c944497 --- /dev/null +++ b/app/components/pub/ui/popover/PopoverTrigger.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/popover/index.ts b/app/components/pub/ui/popover/index.ts new file mode 100644 index 00000000..c621f9b1 --- /dev/null +++ b/app/components/pub/ui/popover/index.ts @@ -0,0 +1,3 @@ +export { default as Popover } from './Popover.vue' +export { default as PopoverContent } from './PopoverContent.vue' +export { default as PopoverTrigger } from './PopoverTrigger.vue' diff --git a/app/components/pub/ui/progress/Progress.vue b/app/components/pub/ui/progress/Progress.vue new file mode 100644 index 00000000..0a1e90af --- /dev/null +++ b/app/components/pub/ui/progress/Progress.vue @@ -0,0 +1,41 @@ + + + + + + + diff --git a/app/components/pub/ui/progress/index.ts b/app/components/pub/ui/progress/index.ts new file mode 100644 index 00000000..eace9893 --- /dev/null +++ b/app/components/pub/ui/progress/index.ts @@ -0,0 +1 @@ +export { default as Progress } from './Progress.vue' diff --git a/app/components/pub/ui/radio-group/RadioGroup.vue b/app/components/pub/ui/radio-group/RadioGroup.vue new file mode 100644 index 00000000..7fbcf9b8 --- /dev/null +++ b/app/components/pub/ui/radio-group/RadioGroup.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/components/pub/ui/radio-group/RadioGroupItem.vue b/app/components/pub/ui/radio-group/RadioGroupItem.vue new file mode 100644 index 00000000..57d452b9 --- /dev/null +++ b/app/components/pub/ui/radio-group/RadioGroupItem.vue @@ -0,0 +1,38 @@ + + + + + + + + + diff --git a/app/components/pub/ui/radio-group/index.ts b/app/components/pub/ui/radio-group/index.ts new file mode 100644 index 00000000..fa1da9c2 --- /dev/null +++ b/app/components/pub/ui/radio-group/index.ts @@ -0,0 +1,2 @@ +export { default as RadioGroup } from './RadioGroup.vue' +export { default as RadioGroupItem } from './RadioGroupItem.vue' diff --git a/app/components/pub/ui/range-calendar/RangeCalendar.vue b/app/components/pub/ui/range-calendar/RangeCalendar.vue new file mode 100644 index 00000000..631d5780 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendar.vue @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + {{ day }} + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarCell.vue b/app/components/pub/ui/range-calendar/RangeCalendarCell.vue new file mode 100644 index 00000000..b6f9a1cc --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarCell.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarCellTrigger.vue b/app/components/pub/ui/range-calendar/RangeCalendarCellTrigger.vue new file mode 100644 index 00000000..5c8aaef1 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarCellTrigger.vue @@ -0,0 +1,42 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarGrid.vue b/app/components/pub/ui/range-calendar/RangeCalendarGrid.vue new file mode 100644 index 00000000..9a1295c5 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarGrid.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarGridBody.vue b/app/components/pub/ui/range-calendar/RangeCalendarGridBody.vue new file mode 100644 index 00000000..b841dd99 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarGridBody.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarGridHead.vue b/app/components/pub/ui/range-calendar/RangeCalendarGridHead.vue new file mode 100644 index 00000000..6e2bcec7 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarGridHead.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarGridRow.vue b/app/components/pub/ui/range-calendar/RangeCalendarGridRow.vue new file mode 100644 index 00000000..fad16899 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarGridRow.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarHeadCell.vue b/app/components/pub/ui/range-calendar/RangeCalendarHeadCell.vue new file mode 100644 index 00000000..92769853 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarHeadCell.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarHeader.vue b/app/components/pub/ui/range-calendar/RangeCalendarHeader.vue new file mode 100644 index 00000000..b99648f5 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarHeader.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarHeading.vue b/app/components/pub/ui/range-calendar/RangeCalendarHeading.vue new file mode 100644 index 00000000..0f592bc5 --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarHeading.vue @@ -0,0 +1,29 @@ + + + + + + {{ headingValue }} + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarNextButton.vue b/app/components/pub/ui/range-calendar/RangeCalendarNextButton.vue new file mode 100644 index 00000000..201151cb --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarNextButton.vue @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/app/components/pub/ui/range-calendar/RangeCalendarPrevButton.vue b/app/components/pub/ui/range-calendar/RangeCalendarPrevButton.vue new file mode 100644 index 00000000..503ce5cb --- /dev/null +++ b/app/components/pub/ui/range-calendar/RangeCalendarPrevButton.vue @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/app/components/pub/ui/range-calendar/index.ts b/app/components/pub/ui/range-calendar/index.ts new file mode 100644 index 00000000..7ba1637e --- /dev/null +++ b/app/components/pub/ui/range-calendar/index.ts @@ -0,0 +1,12 @@ +export { default as RangeCalendar } from './RangeCalendar.vue' +export { default as RangeCalendarCell } from './RangeCalendarCell.vue' +export { default as RangeCalendarCellTrigger } from './RangeCalendarCellTrigger.vue' +export { default as RangeCalendarGrid } from './RangeCalendarGrid.vue' +export { default as RangeCalendarGridBody } from './RangeCalendarGridBody.vue' +export { default as RangeCalendarGridHead } from './RangeCalendarGridHead.vue' +export { default as RangeCalendarGridRow } from './RangeCalendarGridRow.vue' +export { default as RangeCalendarHeadCell } from './RangeCalendarHeadCell.vue' +export { default as RangeCalendarHeader } from './RangeCalendarHeader.vue' +export { default as RangeCalendarHeading } from './RangeCalendarHeading.vue' +export { default as RangeCalendarNextButton } from './RangeCalendarNextButton.vue' +export { default as RangeCalendarPrevButton } from './RangeCalendarPrevButton.vue' diff --git a/app/components/pub/ui/resizable/ResizableHandle.vue b/app/components/pub/ui/resizable/ResizableHandle.vue new file mode 100644 index 00000000..7b57f64d --- /dev/null +++ b/app/components/pub/ui/resizable/ResizableHandle.vue @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/resizable/ResizablePanelGroup.vue b/app/components/pub/ui/resizable/ResizablePanelGroup.vue new file mode 100644 index 00000000..397c0b1d --- /dev/null +++ b/app/components/pub/ui/resizable/ResizablePanelGroup.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/components/pub/ui/resizable/index.ts b/app/components/pub/ui/resizable/index.ts new file mode 100644 index 00000000..605e8106 --- /dev/null +++ b/app/components/pub/ui/resizable/index.ts @@ -0,0 +1,3 @@ +export { default as ResizableHandle } from './ResizableHandle.vue' +export { default as ResizablePanelGroup } from './ResizablePanelGroup.vue' +export { SplitterPanel as ResizablePanel } from 'radix-vue' diff --git a/app/components/pub/ui/scroll-area/ScrollArea.vue b/app/components/pub/ui/scroll-area/ScrollArea.vue new file mode 100644 index 00000000..46a132cf --- /dev/null +++ b/app/components/pub/ui/scroll-area/ScrollArea.vue @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/scroll-area/ScrollBar.vue b/app/components/pub/ui/scroll-area/ScrollBar.vue new file mode 100644 index 00000000..fadaf9ef --- /dev/null +++ b/app/components/pub/ui/scroll-area/ScrollBar.vue @@ -0,0 +1,32 @@ + + + + + + + diff --git a/app/components/pub/ui/scroll-area/index.ts b/app/components/pub/ui/scroll-area/index.ts new file mode 100644 index 00000000..2bd4fae5 --- /dev/null +++ b/app/components/pub/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/app/components/pub/ui/select/Select.vue b/app/components/pub/ui/select/Select.vue new file mode 100644 index 00000000..adc42fdf --- /dev/null +++ b/app/components/pub/ui/select/Select.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/select/SelectContent.vue b/app/components/pub/ui/select/SelectContent.vue new file mode 100644 index 00000000..d06ac835 --- /dev/null +++ b/app/components/pub/ui/select/SelectContent.vue @@ -0,0 +1,54 @@ + + + + + + + + + + + + + diff --git a/app/components/pub/ui/select/SelectGroup.vue b/app/components/pub/ui/select/SelectGroup.vue new file mode 100644 index 00000000..ef6b3c15 --- /dev/null +++ b/app/components/pub/ui/select/SelectGroup.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/select/SelectItem.vue b/app/components/pub/ui/select/SelectItem.vue new file mode 100644 index 00000000..f1c81907 --- /dev/null +++ b/app/components/pub/ui/select/SelectItem.vue @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/select/SelectItemText.vue b/app/components/pub/ui/select/SelectItemText.vue new file mode 100644 index 00000000..a8db38b4 --- /dev/null +++ b/app/components/pub/ui/select/SelectItemText.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/select/SelectLabel.vue b/app/components/pub/ui/select/SelectLabel.vue new file mode 100644 index 00000000..4869948e --- /dev/null +++ b/app/components/pub/ui/select/SelectLabel.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/select/SelectScrollDownButton.vue b/app/components/pub/ui/select/SelectScrollDownButton.vue new file mode 100644 index 00000000..345134e5 --- /dev/null +++ b/app/components/pub/ui/select/SelectScrollDownButton.vue @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/app/components/pub/ui/select/SelectScrollUpButton.vue b/app/components/pub/ui/select/SelectScrollUpButton.vue new file mode 100644 index 00000000..5e369815 --- /dev/null +++ b/app/components/pub/ui/select/SelectScrollUpButton.vue @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/app/components/pub/ui/select/SelectSeparator.vue b/app/components/pub/ui/select/SelectSeparator.vue new file mode 100644 index 00000000..79987f54 --- /dev/null +++ b/app/components/pub/ui/select/SelectSeparator.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/app/components/pub/ui/select/SelectTrigger.vue b/app/components/pub/ui/select/SelectTrigger.vue new file mode 100644 index 00000000..cfcf80b4 --- /dev/null +++ b/app/components/pub/ui/select/SelectTrigger.vue @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/components/pub/ui/select/SelectValue.vue b/app/components/pub/ui/select/SelectValue.vue new file mode 100644 index 00000000..6f37eb55 --- /dev/null +++ b/app/components/pub/ui/select/SelectValue.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/select/index.ts b/app/components/pub/ui/select/index.ts new file mode 100644 index 00000000..31b92946 --- /dev/null +++ b/app/components/pub/ui/select/index.ts @@ -0,0 +1,11 @@ +export { default as Select } from './Select.vue' +export { default as SelectContent } from './SelectContent.vue' +export { default as SelectGroup } from './SelectGroup.vue' +export { default as SelectItem } from './SelectItem.vue' +export { default as SelectItemText } from './SelectItemText.vue' +export { default as SelectLabel } from './SelectLabel.vue' +export { default as SelectScrollDownButton } from './SelectScrollDownButton.vue' +export { default as SelectScrollUpButton } from './SelectScrollUpButton.vue' +export { default as SelectSeparator } from './SelectSeparator.vue' +export { default as SelectTrigger } from './SelectTrigger.vue' +export { default as SelectValue } from './SelectValue.vue' diff --git a/app/components/pub/ui/separator/Separator.vue b/app/components/pub/ui/separator/Separator.vue new file mode 100644 index 00000000..b1a98f14 --- /dev/null +++ b/app/components/pub/ui/separator/Separator.vue @@ -0,0 +1,40 @@ + + + + + {{ props.label }} + + diff --git a/app/components/pub/ui/separator/index.ts b/app/components/pub/ui/separator/index.ts new file mode 100644 index 00000000..2287bcb9 --- /dev/null +++ b/app/components/pub/ui/separator/index.ts @@ -0,0 +1 @@ +export { default as Separator } from './Separator.vue' diff --git a/app/components/pub/ui/sheet/Sheet.vue b/app/components/pub/ui/sheet/Sheet.vue new file mode 100644 index 00000000..5f6a5632 --- /dev/null +++ b/app/components/pub/ui/sheet/Sheet.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/sheet/SheetClose.vue b/app/components/pub/ui/sheet/SheetClose.vue new file mode 100644 index 00000000..1fa61805 --- /dev/null +++ b/app/components/pub/ui/sheet/SheetClose.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/sheet/SheetContent.vue b/app/components/pub/ui/sheet/SheetContent.vue new file mode 100644 index 00000000..a8561bfb --- /dev/null +++ b/app/components/pub/ui/sheet/SheetContent.vue @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/sheet/SheetDescription.vue b/app/components/pub/ui/sheet/SheetDescription.vue new file mode 100644 index 00000000..06b21bba --- /dev/null +++ b/app/components/pub/ui/sheet/SheetDescription.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/sheet/SheetFooter.vue b/app/components/pub/ui/sheet/SheetFooter.vue new file mode 100644 index 00000000..ac2d0c18 --- /dev/null +++ b/app/components/pub/ui/sheet/SheetFooter.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/pub/ui/sheet/SheetHeader.vue b/app/components/pub/ui/sheet/SheetHeader.vue new file mode 100644 index 00000000..541f48f5 --- /dev/null +++ b/app/components/pub/ui/sheet/SheetHeader.vue @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/components/pub/ui/sheet/SheetTitle.vue b/app/components/pub/ui/sheet/SheetTitle.vue new file mode 100644 index 00000000..b1661957 --- /dev/null +++ b/app/components/pub/ui/sheet/SheetTitle.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/sheet/SheetTrigger.vue b/app/components/pub/ui/sheet/SheetTrigger.vue new file mode 100644 index 00000000..b966b29d --- /dev/null +++ b/app/components/pub/ui/sheet/SheetTrigger.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/sheet/index.ts b/app/components/pub/ui/sheet/index.ts new file mode 100644 index 00000000..603fa39d --- /dev/null +++ b/app/components/pub/ui/sheet/index.ts @@ -0,0 +1,32 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Sheet } from './Sheet.vue' +export { default as SheetClose } from './SheetClose.vue' +export { default as SheetContent } from './SheetContent.vue' +export { default as SheetDescription } from './SheetDescription.vue' +export { default as SheetFooter } from './SheetFooter.vue' +export { default as SheetHeader } from './SheetHeader.vue' +export { default as SheetTitle } from './SheetTitle.vue' +export { default as SheetTrigger } from './SheetTrigger.vue' + +export const sheetVariants = cva( + 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', + { + variants: { + side: { + top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top', + bottom: + 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom', + left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm', + right: + 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm', + }, + }, + defaultVariants: { + side: 'right', + }, + }, +) + +export type SheetVariants = VariantProps diff --git a/app/components/pub/ui/sidebar/Sidebar.vue b/app/components/pub/ui/sidebar/Sidebar.vue new file mode 100644 index 00000000..8a0c8bc8 --- /dev/null +++ b/app/components/pub/ui/sidebar/Sidebar.vue @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarContent.vue b/app/components/pub/ui/sidebar/SidebarContent.vue new file mode 100644 index 00000000..4b6244a4 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarContent.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarFooter.vue b/app/components/pub/ui/sidebar/SidebarFooter.vue new file mode 100644 index 00000000..9d145c05 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarFooter.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarGroup.vue b/app/components/pub/ui/sidebar/SidebarGroup.vue new file mode 100644 index 00000000..adc6843c --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarGroup.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarGroupAction.vue b/app/components/pub/ui/sidebar/SidebarGroupAction.vue new file mode 100644 index 00000000..74cac4ea --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarGroupAction.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarGroupContent.vue b/app/components/pub/ui/sidebar/SidebarGroupContent.vue new file mode 100644 index 00000000..37390c93 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarGroupContent.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarGroupLabel.vue b/app/components/pub/ui/sidebar/SidebarGroupLabel.vue new file mode 100644 index 00000000..83826c3e --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarGroupLabel.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarHeader.vue b/app/components/pub/ui/sidebar/SidebarHeader.vue new file mode 100644 index 00000000..eecaddb2 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarHeader.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarInput.vue b/app/components/pub/ui/sidebar/SidebarInput.vue new file mode 100644 index 00000000..e38d141e --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarInput.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarInset.vue b/app/components/pub/ui/sidebar/SidebarInset.vue new file mode 100644 index 00000000..cc7d45dc --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarInset.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenu.vue b/app/components/pub/ui/sidebar/SidebarMenu.vue new file mode 100644 index 00000000..3bfd73e6 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenu.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuAction.vue b/app/components/pub/ui/sidebar/SidebarMenuAction.vue new file mode 100644 index 00000000..cc6ced01 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuAction.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuBadge.vue b/app/components/pub/ui/sidebar/SidebarMenuBadge.vue new file mode 100644 index 00000000..f8789687 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuBadge.vue @@ -0,0 +1,25 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuButton.vue b/app/components/pub/ui/sidebar/SidebarMenuButton.vue new file mode 100644 index 00000000..e97c8fa6 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuButton.vue @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + {{ tooltip }} + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuButtonChild.vue b/app/components/pub/ui/sidebar/SidebarMenuButtonChild.vue new file mode 100644 index 00000000..43bea5eb --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuButtonChild.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuItem.vue b/app/components/pub/ui/sidebar/SidebarMenuItem.vue new file mode 100644 index 00000000..b6000734 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuItem.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuSkeleton.vue b/app/components/pub/ui/sidebar/SidebarMenuSkeleton.vue new file mode 100644 index 00000000..3011fb0f --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuSkeleton.vue @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuSub.vue b/app/components/pub/ui/sidebar/SidebarMenuSub.vue new file mode 100644 index 00000000..0bb5af79 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuSub.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuSubButton.vue b/app/components/pub/ui/sidebar/SidebarMenuSubButton.vue new file mode 100644 index 00000000..353b3ae7 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuSubButton.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarMenuSubItem.vue b/app/components/pub/ui/sidebar/SidebarMenuSubItem.vue new file mode 100644 index 00000000..b04030b0 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarMenuSubItem.vue @@ -0,0 +1,9 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarProvider.vue b/app/components/pub/ui/sidebar/SidebarProvider.vue new file mode 100644 index 00000000..d252f951 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarProvider.vue @@ -0,0 +1,102 @@ + + + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarRail.vue b/app/components/pub/ui/sidebar/SidebarRail.vue new file mode 100644 index 00000000..9b644cdd --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarRail.vue @@ -0,0 +1,32 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarSeparator.vue b/app/components/pub/ui/sidebar/SidebarSeparator.vue new file mode 100644 index 00000000..d4ef82fa --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarSeparator.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/sidebar/SidebarTrigger.vue b/app/components/pub/ui/sidebar/SidebarTrigger.vue new file mode 100644 index 00000000..cf4937e7 --- /dev/null +++ b/app/components/pub/ui/sidebar/SidebarTrigger.vue @@ -0,0 +1,20 @@ + + + + + + Toggle Sidebar + + diff --git a/app/components/pub/ui/sidebar/index.ts b/app/components/pub/ui/sidebar/index.ts new file mode 100644 index 00000000..a6de2196 --- /dev/null +++ b/app/components/pub/ui/sidebar/index.ts @@ -0,0 +1,52 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Sidebar } from './Sidebar.vue' +export { default as SidebarContent } from './SidebarContent.vue' +export { default as SidebarFooter } from './SidebarFooter.vue' +export { default as SidebarGroup } from './SidebarGroup.vue' +export { default as SidebarGroupAction } from './SidebarGroupAction.vue' +export { default as SidebarGroupContent } from './SidebarGroupContent.vue' +export { default as SidebarGroupLabel } from './SidebarGroupLabel.vue' +export { default as SidebarHeader } from './SidebarHeader.vue' +export { default as SidebarInput } from './SidebarInput.vue' +export { default as SidebarInset } from './SidebarInset.vue' +export { default as SidebarMenu } from './SidebarMenu.vue' +export { default as SidebarMenuAction } from './SidebarMenuAction.vue' +export { default as SidebarMenuBadge } from './SidebarMenuBadge.vue' +export { default as SidebarMenuButton } from './SidebarMenuButton.vue' +export { default as SidebarMenuItem } from './SidebarMenuItem.vue' +export { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue' +export { default as SidebarMenuSub } from './SidebarMenuSub.vue' +export { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue' +export { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue' +export { default as SidebarProvider } from './SidebarProvider.vue' +export { default as SidebarRail } from './SidebarRail.vue' +export { default as SidebarSeparator } from './SidebarSeparator.vue' +export { default as SidebarTrigger } from './SidebarTrigger.vue' + +export { useSidebar } from './utils' + +export const sidebarMenuButtonVariants = cva( + 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-[current=page]:bg-sidebar-accent aria-[current=page]:font-medium aria-[current=page]:text-sidebar-accent-foreground data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', + { + variants: { + variant: { + default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', + outline: + 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]', + }, + size: { + default: 'h-8 text-sm', + sm: 'h-7 text-xs', + lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type SidebarMenuButtonVariants = VariantProps diff --git a/app/components/pub/ui/sidebar/utils.ts b/app/components/pub/ui/sidebar/utils.ts new file mode 100644 index 00000000..3ded66c4 --- /dev/null +++ b/app/components/pub/ui/sidebar/utils.ts @@ -0,0 +1,19 @@ +import type { ComputedRef, Ref } from 'vue' +import { createContext } from 'radix-vue' + +export const SIDEBAR_COOKIE_NAME = 'sidebar:state' +export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 +export const SIDEBAR_WIDTH = '16rem' +export const SIDEBAR_WIDTH_MOBILE = '18rem' +export const SIDEBAR_WIDTH_ICON = '3rem' +export const SIDEBAR_KEYBOARD_SHORTCUT = 'b' + +export const [useSidebar, provideSidebarContext] = createContext<{ + state: ComputedRef<'expanded' | 'collapsed'> + open: Ref + setOpen: (value: boolean) => void + isMobile: Ref + openMobile: Ref + setOpenMobile: (value: boolean) => void + toggleSidebar: () => void +}>('Sidebar') diff --git a/app/components/pub/ui/skeleton/Skeleton.vue b/app/components/pub/ui/skeleton/Skeleton.vue new file mode 100644 index 00000000..94bc183a --- /dev/null +++ b/app/components/pub/ui/skeleton/Skeleton.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/app/components/pub/ui/skeleton/index.ts b/app/components/pub/ui/skeleton/index.ts new file mode 100644 index 00000000..be21fad3 --- /dev/null +++ b/app/components/pub/ui/skeleton/index.ts @@ -0,0 +1 @@ +export { default as Skeleton } from './Skeleton.vue' diff --git a/app/components/pub/ui/slider/Slider.vue b/app/components/pub/ui/slider/Slider.vue new file mode 100644 index 00000000..b56a323c --- /dev/null +++ b/app/components/pub/ui/slider/Slider.vue @@ -0,0 +1,37 @@ + + + + + + + + + + diff --git a/app/components/pub/ui/slider/index.ts b/app/components/pub/ui/slider/index.ts new file mode 100644 index 00000000..1c945deb --- /dev/null +++ b/app/components/pub/ui/slider/index.ts @@ -0,0 +1 @@ +export { default as Slider } from './Slider.vue' diff --git a/app/components/pub/ui/sonner/Sonner.vue b/app/components/pub/ui/sonner/Sonner.vue new file mode 100644 index 00000000..bd67f874 --- /dev/null +++ b/app/components/pub/ui/sonner/Sonner.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/app/components/pub/ui/sonner/index.ts b/app/components/pub/ui/sonner/index.ts new file mode 100644 index 00000000..8d3d4062 --- /dev/null +++ b/app/components/pub/ui/sonner/index.ts @@ -0,0 +1 @@ +export { default as Sonner } from './Sonner.vue' diff --git a/app/components/pub/ui/stepper/Stepper.vue b/app/components/pub/ui/stepper/Stepper.vue new file mode 100644 index 00000000..a9bb7826 --- /dev/null +++ b/app/components/pub/ui/stepper/Stepper.vue @@ -0,0 +1,32 @@ + + + + + + + diff --git a/app/components/pub/ui/stepper/StepperDescription.vue b/app/components/pub/ui/stepper/StepperDescription.vue new file mode 100644 index 00000000..dbf68040 --- /dev/null +++ b/app/components/pub/ui/stepper/StepperDescription.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/stepper/StepperIndicator.vue b/app/components/pub/ui/stepper/StepperIndicator.vue new file mode 100644 index 00000000..75e3751c --- /dev/null +++ b/app/components/pub/ui/stepper/StepperIndicator.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/app/components/pub/ui/stepper/StepperItem.vue b/app/components/pub/ui/stepper/StepperItem.vue new file mode 100644 index 00000000..1d3b9450 --- /dev/null +++ b/app/components/pub/ui/stepper/StepperItem.vue @@ -0,0 +1,28 @@ + + + + + + + diff --git a/app/components/pub/ui/stepper/StepperSeparator.vue b/app/components/pub/ui/stepper/StepperSeparator.vue new file mode 100644 index 00000000..50e9b131 --- /dev/null +++ b/app/components/pub/ui/stepper/StepperSeparator.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/app/components/pub/ui/stepper/StepperTitle.vue b/app/components/pub/ui/stepper/StepperTitle.vue new file mode 100644 index 00000000..70e672c9 --- /dev/null +++ b/app/components/pub/ui/stepper/StepperTitle.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/stepper/StepperTrigger.vue b/app/components/pub/ui/stepper/StepperTrigger.vue new file mode 100644 index 00000000..0c426da1 --- /dev/null +++ b/app/components/pub/ui/stepper/StepperTrigger.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/components/pub/ui/stepper/index.ts b/app/components/pub/ui/stepper/index.ts new file mode 100644 index 00000000..a4065a57 --- /dev/null +++ b/app/components/pub/ui/stepper/index.ts @@ -0,0 +1,7 @@ +export { default as Stepper } from './Stepper.vue' +export { default as StepperDescription } from './StepperDescription.vue' +export { default as StepperIndicator } from './StepperIndicator.vue' +export { default as StepperItem } from './StepperItem.vue' +export { default as StepperSeparator } from './StepperSeparator.vue' +export { default as StepperTitle } from './StepperTitle.vue' +export { default as StepperTrigger } from './StepperTrigger.vue' diff --git a/app/components/pub/ui/switch/Switch.vue b/app/components/pub/ui/switch/Switch.vue new file mode 100644 index 00000000..bb9c199a --- /dev/null +++ b/app/components/pub/ui/switch/Switch.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/app/components/pub/ui/switch/index.ts b/app/components/pub/ui/switch/index.ts new file mode 100644 index 00000000..87b4b17d --- /dev/null +++ b/app/components/pub/ui/switch/index.ts @@ -0,0 +1 @@ +export { default as Switch } from './Switch.vue' diff --git a/app/components/pub/ui/table/Table.vue b/app/components/pub/ui/table/Table.vue new file mode 100644 index 00000000..4d5412cf --- /dev/null +++ b/app/components/pub/ui/table/Table.vue @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/app/components/pub/ui/table/TableBody.vue b/app/components/pub/ui/table/TableBody.vue new file mode 100644 index 00000000..ab7a937d --- /dev/null +++ b/app/components/pub/ui/table/TableBody.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/table/TableCaption.vue b/app/components/pub/ui/table/TableCaption.vue new file mode 100644 index 00000000..3904c563 --- /dev/null +++ b/app/components/pub/ui/table/TableCaption.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/table/TableCell.vue b/app/components/pub/ui/table/TableCell.vue new file mode 100644 index 00000000..4a4da400 --- /dev/null +++ b/app/components/pub/ui/table/TableCell.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/table/TableEmpty.vue b/app/components/pub/ui/table/TableEmpty.vue new file mode 100644 index 00000000..6576cdde --- /dev/null +++ b/app/components/pub/ui/table/TableEmpty.vue @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/app/components/pub/ui/table/TableFooter.vue b/app/components/pub/ui/table/TableFooter.vue new file mode 100644 index 00000000..693a4386 --- /dev/null +++ b/app/components/pub/ui/table/TableFooter.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/table/TableHead.vue b/app/components/pub/ui/table/TableHead.vue new file mode 100644 index 00000000..e882b608 --- /dev/null +++ b/app/components/pub/ui/table/TableHead.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/table/TableHeader.vue b/app/components/pub/ui/table/TableHeader.vue new file mode 100644 index 00000000..220352f6 --- /dev/null +++ b/app/components/pub/ui/table/TableHeader.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/table/TableRow.vue b/app/components/pub/ui/table/TableRow.vue new file mode 100644 index 00000000..5b9e8749 --- /dev/null +++ b/app/components/pub/ui/table/TableRow.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/components/pub/ui/table/index.ts b/app/components/pub/ui/table/index.ts new file mode 100644 index 00000000..5bfa3862 --- /dev/null +++ b/app/components/pub/ui/table/index.ts @@ -0,0 +1,8 @@ +export { default as Table } from './Table.vue' +export { default as TableBody } from './TableBody.vue' +export { default as TableCaption } from './TableCaption.vue' +export { default as TableCell } from './TableCell.vue' +export { default as TableEmpty } from './TableEmpty.vue' +export { default as TableHead } from './TableHead.vue' +export { default as TableHeader } from './TableHeader.vue' +export { default as TableRow } from './TableRow.vue' diff --git a/app/components/pub/ui/table/separator/Separator.vue b/app/components/pub/ui/table/separator/Separator.vue new file mode 100644 index 00000000..ac098256 --- /dev/null +++ b/app/components/pub/ui/table/separator/Separator.vue @@ -0,0 +1,40 @@ + + + + + {{ props.label }} + + diff --git a/app/components/pub/ui/table/separator/index.ts b/app/components/pub/ui/table/separator/index.ts new file mode 100644 index 00000000..2287bcb9 --- /dev/null +++ b/app/components/pub/ui/table/separator/index.ts @@ -0,0 +1 @@ +export { default as Separator } from './Separator.vue' diff --git a/app/components/pub/ui/tabs/Tabs.vue b/app/components/pub/ui/tabs/Tabs.vue new file mode 100644 index 00000000..8feda3f7 --- /dev/null +++ b/app/components/pub/ui/tabs/Tabs.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/tabs/TabsContent.vue b/app/components/pub/ui/tabs/TabsContent.vue new file mode 100644 index 00000000..dc6d9f8a --- /dev/null +++ b/app/components/pub/ui/tabs/TabsContent.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/tabs/TabsList.vue b/app/components/pub/ui/tabs/TabsList.vue new file mode 100644 index 00000000..f4bd9c04 --- /dev/null +++ b/app/components/pub/ui/tabs/TabsList.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/components/pub/ui/tabs/TabsTrigger.vue b/app/components/pub/ui/tabs/TabsTrigger.vue new file mode 100644 index 00000000..bb8d92c9 --- /dev/null +++ b/app/components/pub/ui/tabs/TabsTrigger.vue @@ -0,0 +1,29 @@ + + + + + + + diff --git a/app/components/pub/ui/tabs/index.ts b/app/components/pub/ui/tabs/index.ts new file mode 100644 index 00000000..a5e58dc0 --- /dev/null +++ b/app/components/pub/ui/tabs/index.ts @@ -0,0 +1,4 @@ +export { default as Tabs } from './Tabs.vue' +export { default as TabsContent } from './TabsContent.vue' +export { default as TabsList } from './TabsList.vue' +export { default as TabsTrigger } from './TabsTrigger.vue' diff --git a/app/components/pub/ui/tags-input/TagsInput.vue b/app/components/pub/ui/tags-input/TagsInput.vue new file mode 100644 index 00000000..a6cc3d7b --- /dev/null +++ b/app/components/pub/ui/tags-input/TagsInput.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/tags-input/TagsInputInput.vue b/app/components/pub/ui/tags-input/TagsInputInput.vue new file mode 100644 index 00000000..83365804 --- /dev/null +++ b/app/components/pub/ui/tags-input/TagsInputInput.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/app/components/pub/ui/tags-input/TagsInputItem.vue b/app/components/pub/ui/tags-input/TagsInputItem.vue new file mode 100644 index 00000000..e074a475 --- /dev/null +++ b/app/components/pub/ui/tags-input/TagsInputItem.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/tags-input/TagsInputItemDelete.vue b/app/components/pub/ui/tags-input/TagsInputItemDelete.vue new file mode 100644 index 00000000..77489a36 --- /dev/null +++ b/app/components/pub/ui/tags-input/TagsInputItemDelete.vue @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/app/components/pub/ui/tags-input/TagsInputItemText.vue b/app/components/pub/ui/tags-input/TagsInputItemText.vue new file mode 100644 index 00000000..5c8888cf --- /dev/null +++ b/app/components/pub/ui/tags-input/TagsInputItemText.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/app/components/pub/ui/tags-input/index.ts b/app/components/pub/ui/tags-input/index.ts new file mode 100644 index 00000000..31305f34 --- /dev/null +++ b/app/components/pub/ui/tags-input/index.ts @@ -0,0 +1,5 @@ +export { default as TagsInput } from './TagsInput.vue' +export { default as TagsInputInput } from './TagsInputInput.vue' +export { default as TagsInputItem } from './TagsInputItem.vue' +export { default as TagsInputItemDelete } from './TagsInputItemDelete.vue' +export { default as TagsInputItemText } from './TagsInputItemText.vue' diff --git a/app/components/pub/ui/textarea/Textarea.vue b/app/components/pub/ui/textarea/Textarea.vue new file mode 100644 index 00000000..1dee55d2 --- /dev/null +++ b/app/components/pub/ui/textarea/Textarea.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/app/components/pub/ui/textarea/index.ts b/app/components/pub/ui/textarea/index.ts new file mode 100644 index 00000000..6a7ab2a7 --- /dev/null +++ b/app/components/pub/ui/textarea/index.ts @@ -0,0 +1 @@ +export { default as Textarea } from './Textarea.vue' diff --git a/app/components/pub/ui/toast/Toast.vue b/app/components/pub/ui/toast/Toast.vue new file mode 100644 index 00000000..4f8478d8 --- /dev/null +++ b/app/components/pub/ui/toast/Toast.vue @@ -0,0 +1,30 @@ + + + + + + + diff --git a/app/components/pub/ui/toast/ToastAction.vue b/app/components/pub/ui/toast/ToastAction.vue new file mode 100644 index 00000000..6b791b94 --- /dev/null +++ b/app/components/pub/ui/toast/ToastAction.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/toast/ToastClose.vue b/app/components/pub/ui/toast/ToastClose.vue new file mode 100644 index 00000000..1012e1d7 --- /dev/null +++ b/app/components/pub/ui/toast/ToastClose.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/app/components/pub/ui/toast/ToastDescription.vue b/app/components/pub/ui/toast/ToastDescription.vue new file mode 100644 index 00000000..8fd121e4 --- /dev/null +++ b/app/components/pub/ui/toast/ToastDescription.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/toast/ToastProvider.vue b/app/components/pub/ui/toast/ToastProvider.vue new file mode 100644 index 00000000..97674052 --- /dev/null +++ b/app/components/pub/ui/toast/ToastProvider.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/toast/ToastTitle.vue b/app/components/pub/ui/toast/ToastTitle.vue new file mode 100644 index 00000000..a85d3c8a --- /dev/null +++ b/app/components/pub/ui/toast/ToastTitle.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/pub/ui/toast/ToastViewport.vue b/app/components/pub/ui/toast/ToastViewport.vue new file mode 100644 index 00000000..13a80741 --- /dev/null +++ b/app/components/pub/ui/toast/ToastViewport.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/app/components/pub/ui/toast/Toaster.vue b/app/components/pub/ui/toast/Toaster.vue new file mode 100644 index 00000000..cac5dad0 --- /dev/null +++ b/app/components/pub/ui/toast/Toaster.vue @@ -0,0 +1,30 @@ + + + + + + + + {{ toast.title }} + + + + + + + {{ toast.description }} + + + + + + + + + diff --git a/app/components/pub/ui/toast/index.ts b/app/components/pub/ui/toast/index.ts new file mode 100644 index 00000000..294b1e99 --- /dev/null +++ b/app/components/pub/ui/toast/index.ts @@ -0,0 +1,39 @@ +import type { VariantProps } from 'class-variance-authority' +import type { ToastRootProps } from 'radix-vue' + +import type { HTMLAttributes } from 'vue' +import { cva } from 'class-variance-authority' + +export { default as Toast } from './Toast.vue' +export { default as ToastAction } from './ToastAction.vue' +export { default as ToastClose } from './ToastClose.vue' +export { default as ToastDescription } from './ToastDescription.vue' +export { default as Toaster } from './Toaster.vue' +export { default as ToastProvider } from './ToastProvider.vue' +export { default as ToastTitle } from './ToastTitle.vue' +export { default as ToastViewport } from './ToastViewport.vue' +export { toast, useToast } from './use-toast' + +export const toastVariants = cva( + 'group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full', + { + variants: { + variant: { + default: 'border bg-background text-foreground', + destructive: + 'destructive group border-destructive bg-destructive text-destructive-foreground', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +) + +type ToastVariants = VariantProps + +export interface ToastProps extends ToastRootProps { + class?: HTMLAttributes['class'] + variant?: ToastVariants['variant'] + onOpenChange?: ((value: boolean) => void) | undefined +} diff --git a/app/components/pub/ui/toast/use-toast.ts b/app/components/pub/ui/toast/use-toast.ts new file mode 100644 index 00000000..228e5a79 --- /dev/null +++ b/app/components/pub/ui/toast/use-toast.ts @@ -0,0 +1,165 @@ +import type { Component, VNode } from 'vue' +import type { ToastProps } from '.' +import { computed, ref } from 'vue' + +const TOAST_LIMIT = 1 +const TOAST_REMOVE_DELAY = 1000000 + +export type StringOrVNode = + | string + | VNode + | (() => VNode) + +type ToasterToast = ToastProps & { + id: string + title?: string + description?: StringOrVNode + action?: Component +} + +const actionTypes = { + ADD_TOAST: 'ADD_TOAST', + UPDATE_TOAST: 'UPDATE_TOAST', + DISMISS_TOAST: 'DISMISS_TOAST', + REMOVE_TOAST: 'REMOVE_TOAST', +} as const + +let count = 0 + +function genId() { + count = (count + 1) % Number.MAX_VALUE + return count.toString() +} + +type ActionType = typeof actionTypes + +type Action = + | { + type: ActionType['ADD_TOAST'] + toast: ToasterToast + } + | { + type: ActionType['UPDATE_TOAST'] + toast: Partial + } + | { + type: ActionType['DISMISS_TOAST'] + toastId?: ToasterToast['id'] + } + | { + type: ActionType['REMOVE_TOAST'] + toastId?: ToasterToast['id'] + } + +interface State { + toasts: ToasterToast[] +} + +const toastTimeouts = new Map>() + +function addToRemoveQueue(toastId: string) { + if (toastTimeouts.has(toastId)) + return + + const timeout = setTimeout(() => { + toastTimeouts.delete(toastId) + dispatch({ + type: actionTypes.REMOVE_TOAST, + toastId, + }) + }, TOAST_REMOVE_DELAY) + + toastTimeouts.set(toastId, timeout) +} + +const state = ref({ + toasts: [], +}) + +function dispatch(action: Action) { + switch (action.type) { + case actionTypes.ADD_TOAST: + state.value.toasts = [action.toast, ...state.value.toasts].slice(0, TOAST_LIMIT) + break + + case actionTypes.UPDATE_TOAST: + state.value.toasts = state.value.toasts.map(t => + t.id === action.toast.id ? { ...t, ...action.toast } : t, + ) + break + + case actionTypes.DISMISS_TOAST: { + const { toastId } = action + + if (toastId) { + addToRemoveQueue(toastId) + } + else { + state.value.toasts.forEach((toast) => { + addToRemoveQueue(toast.id) + }) + } + + state.value.toasts = state.value.toasts.map(t => + t.id === toastId || toastId === undefined + ? { + ...t, + open: false, + } + : t, + ) + break + } + + case actionTypes.REMOVE_TOAST: + if (action.toastId === undefined) + state.value.toasts = [] + else + state.value.toasts = state.value.toasts.filter(t => t.id !== action.toastId) + + break + } +} + +function useToast() { + return { + toasts: computed(() => state.value.toasts), + toast, + dismiss: (toastId?: string) => dispatch({ type: actionTypes.DISMISS_TOAST, toastId }), + } +} + +type Toast = Omit + +function toast(props: Toast) { + const id = genId() + + const update = (props: ToasterToast) => + dispatch({ + type: actionTypes.UPDATE_TOAST, + toast: { ...props, id }, + }) + + const dismiss = () => dispatch({ type: actionTypes.DISMISS_TOAST, toastId: id }) + + dispatch({ + type: actionTypes.ADD_TOAST, + toast: { + ...props, + id, + open: true, + onOpenChange: (open: boolean) => { + if (!open) + dismiss() + }, + }, + }) + + return { + id, + dismiss, + update, + } +} + +export { toast, useToast } diff --git a/app/components/pub/ui/toggle-group/ToggleGroup.vue b/app/components/pub/ui/toggle-group/ToggleGroup.vue new file mode 100644 index 00000000..97416f88 --- /dev/null +++ b/app/components/pub/ui/toggle-group/ToggleGroup.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/app/components/pub/ui/toggle-group/ToggleGroupItem.vue b/app/components/pub/ui/toggle-group/ToggleGroupItem.vue new file mode 100644 index 00000000..dad82106 --- /dev/null +++ b/app/components/pub/ui/toggle-group/ToggleGroupItem.vue @@ -0,0 +1,37 @@ + + + + + + + diff --git a/app/components/pub/ui/toggle-group/index.ts b/app/components/pub/ui/toggle-group/index.ts new file mode 100644 index 00000000..9f89ad77 --- /dev/null +++ b/app/components/pub/ui/toggle-group/index.ts @@ -0,0 +1,2 @@ +export { default as ToggleGroup } from './ToggleGroup.vue' +export { default as ToggleGroupItem } from './ToggleGroupItem.vue' diff --git a/app/components/pub/ui/toggle/Toggle.vue b/app/components/pub/ui/toggle/Toggle.vue new file mode 100644 index 00000000..2a24e28f --- /dev/null +++ b/app/components/pub/ui/toggle/Toggle.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/app/components/pub/ui/toggle/index.ts b/app/components/pub/ui/toggle/index.ts new file mode 100644 index 00000000..07acae50 --- /dev/null +++ b/app/components/pub/ui/toggle/index.ts @@ -0,0 +1,28 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Toggle } from './Toggle.vue' + +export const toggleVariants = cva( + 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground', + { + variants: { + variant: { + default: 'bg-transparent', + outline: + 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground', + }, + size: { + default: 'h-9 px-3', + sm: 'h-8 px-2', + lg: 'h-10 px-3', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type ToggleVariants = VariantProps diff --git a/app/components/pub/ui/tooltip/Tooltip.vue b/app/components/pub/ui/tooltip/Tooltip.vue new file mode 100644 index 00000000..3898c703 --- /dev/null +++ b/app/components/pub/ui/tooltip/Tooltip.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/components/pub/ui/tooltip/TooltipContent.vue b/app/components/pub/ui/tooltip/TooltipContent.vue new file mode 100644 index 00000000..62a65434 --- /dev/null +++ b/app/components/pub/ui/tooltip/TooltipContent.vue @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/app/components/pub/ui/tooltip/TooltipProvider.vue b/app/components/pub/ui/tooltip/TooltipProvider.vue new file mode 100644 index 00000000..23244b18 --- /dev/null +++ b/app/components/pub/ui/tooltip/TooltipProvider.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/tooltip/TooltipTrigger.vue b/app/components/pub/ui/tooltip/TooltipTrigger.vue new file mode 100644 index 00000000..41acc5e9 --- /dev/null +++ b/app/components/pub/ui/tooltip/TooltipTrigger.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/components/pub/ui/tooltip/index.ts b/app/components/pub/ui/tooltip/index.ts new file mode 100644 index 00000000..5ab96536 --- /dev/null +++ b/app/components/pub/ui/tooltip/index.ts @@ -0,0 +1,4 @@ +export { default as Tooltip } from './Tooltip.vue' +export { default as TooltipContent } from './TooltipContent.vue' +export { default as TooltipProvider } from './TooltipProvider.vue' +export { default as TooltipTrigger } from './TooltipTrigger.vue' diff --git a/nuxt.config.ts b/nuxt.config.ts index b6baa24a..524b9cb1 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,5 +1,36 @@ // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ + devtools: { enabled: true }, + modules: [ + '@unocss/nuxt', + 'shadcn-nuxt', + '@vueuse/nuxt', + '@nuxt/eslint', + '@nuxt/icon', + '@pinia/nuxt', + '@nuxtjs/color-mode', + ], + + css: ['@unocss/reset/tailwind.css'], + + features: { + // For UnoCSS + inlineStyles: false, + }, + + eslint: { + config: { + standalone: false, + }, + }, + + imports: { + dirs: ['./app/lib'], + }, + shadcn: { + prefix: '', + componentDir: './app/components/pub/ui', + }, + compatibilityDate: '2025-07-15', - devtools: { enabled: true } })
+ +