diff --git a/frontend/app/web-gold/package.json b/frontend/app/web-gold/package.json index 6f4d82feaa..42ef64d32e 100644 --- a/frontend/app/web-gold/package.json +++ b/frontend/app/web-gold/package.json @@ -20,6 +20,7 @@ "@ai-sdk/openai": "^3.0.12", "@ant-design/icons-vue": "^7.0.1", "@microsoft/fetch-event-source": "^2.0.1", + "@vueuse/core": "^14.2.1", "ai": "^6.0.39", "ant-design-vue": "^4.2.6", "aplayer": "^1.10.1", @@ -32,6 +33,7 @@ "pinia": "^3.0.3", "pinia-plugin-persistedstate": "^4.5.0", "qs": "^6.14.0", + "reka-ui": "^2.9.2", "tailwind-merge": "^3.5.0", "tailwindcss": "^4.2.1", "vue": "^3.5.22", diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialog.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialog.vue new file mode 100644 index 0000000000..b6e6b4bf89 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialog.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogAction.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogAction.vue new file mode 100644 index 0000000000..09cf6fcbcb --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogAction.vue @@ -0,0 +1,18 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogCancel.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogCancel.vue new file mode 100644 index 0000000000..e261894e50 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogCancel.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogContent.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogContent.vue new file mode 100644 index 0000000000..4597f0dc62 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogContent.vue @@ -0,0 +1,44 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogDescription.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogDescription.vue new file mode 100644 index 0000000000..69642c9a57 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogDescription.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogFooter.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogFooter.vue new file mode 100644 index 0000000000..50d4098eaa --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogFooter.vue @@ -0,0 +1,22 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogHeader.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogHeader.vue new file mode 100644 index 0000000000..dbe72a764e --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogTitle.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogTitle.vue new file mode 100644 index 0000000000..bb97e4d4a1 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogTitle.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogTrigger.vue b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogTrigger.vue new file mode 100644 index 0000000000..98d40ee089 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert-dialog/AlertDialogTrigger.vue @@ -0,0 +1,12 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert-dialog/index.ts b/frontend/app/web-gold/src/components/ui/alert-dialog/index.ts new file mode 100644 index 0000000000..cf1b45dff8 --- /dev/null +++ b/frontend/app/web-gold/src/components/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/frontend/app/web-gold/src/components/ui/alert/Alert.vue b/frontend/app/web-gold/src/components/ui/alert/Alert.vue new file mode 100644 index 0000000000..a9d336ffac --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert/Alert.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert/AlertDescription.vue b/frontend/app/web-gold/src/components/ui/alert/AlertDescription.vue new file mode 100644 index 0000000000..9f7d24dfdd --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert/AlertDescription.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert/AlertTitle.vue b/frontend/app/web-gold/src/components/ui/alert/AlertTitle.vue new file mode 100644 index 0000000000..b2183843dc --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/alert/AlertTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/alert/index.ts b/frontend/app/web-gold/src/components/ui/alert/index.ts new file mode 100644 index 0000000000..42d07b64cf --- /dev/null +++ b/frontend/app/web-gold/src/components/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 grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +) + +export type AlertVariants = VariantProps diff --git a/frontend/app/web-gold/src/components/ui/aspect-ratio/AspectRatio.vue b/frontend/app/web-gold/src/components/ui/aspect-ratio/AspectRatio.vue new file mode 100644 index 0000000000..857c208de2 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/aspect-ratio/AspectRatio.vue @@ -0,0 +1,16 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/aspect-ratio/index.ts b/frontend/app/web-gold/src/components/ui/aspect-ratio/index.ts new file mode 100644 index 0000000000..e658f55a05 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/aspect-ratio/index.ts @@ -0,0 +1 @@ +export { default as AspectRatio } from "./AspectRatio.vue" diff --git a/frontend/app/web-gold/src/components/ui/avatar/Avatar.vue b/frontend/app/web-gold/src/components/ui/avatar/Avatar.vue new file mode 100644 index 0000000000..bb7e669f97 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/avatar/Avatar.vue @@ -0,0 +1,18 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/avatar/AvatarFallback.vue b/frontend/app/web-gold/src/components/ui/avatar/AvatarFallback.vue new file mode 100644 index 0000000000..16b588ae38 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/avatar/AvatarFallback.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/avatar/AvatarImage.vue b/frontend/app/web-gold/src/components/ui/avatar/AvatarImage.vue new file mode 100644 index 0000000000..24a81664eb --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/avatar/AvatarImage.vue @@ -0,0 +1,16 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/avatar/index.ts b/frontend/app/web-gold/src/components/ui/avatar/index.ts new file mode 100644 index 0000000000..cf0e003186 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/avatar/index.ts @@ -0,0 +1,3 @@ +export { default as Avatar } from "./Avatar.vue" +export { default as AvatarFallback } from "./AvatarFallback.vue" +export { default as AvatarImage } from "./AvatarImage.vue" diff --git a/frontend/app/web-gold/src/components/ui/badge/Badge.vue b/frontend/app/web-gold/src/components/ui/badge/Badge.vue new file mode 100644 index 0000000000..d894dfe08a --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/badge/Badge.vue @@ -0,0 +1,26 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/badge/index.ts b/frontend/app/web-gold/src/components/ui/badge/index.ts new file mode 100644 index 0000000000..bbc0dfa3b2 --- /dev/null +++ b/frontend/app/web-gold/src/components/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 justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +) +export type BadgeVariants = VariantProps diff --git a/frontend/app/web-gold/src/components/ui/button/Button.vue b/frontend/app/web-gold/src/components/ui/button/Button.vue new file mode 100644 index 0000000000..3763470a1a --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/button/Button.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/button/index.ts b/frontend/app/web-gold/src/components/ui/button/index.ts new file mode 100644 index 0000000000..26e2c559c1 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/button/index.ts @@ -0,0 +1,38 @@ +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 gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + "default": "h-9 px-4 py-2 has-[>svg]:px-3", + "sm": "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + "lg": "h-10 rounded-md px-6 has-[>svg]:px-4", + "icon": "size-9", + "icon-sm": "size-8", + "icon-lg": "size-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +) +export type ButtonVariants = VariantProps diff --git a/frontend/app/web-gold/src/components/ui/calendar/Calendar.vue b/frontend/app/web-gold/src/components/ui/calendar/Calendar.vue new file mode 100644 index 0000000000..56a650c54a --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/Calendar.vue @@ -0,0 +1,160 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarCell.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarCell.vue new file mode 100644 index 0000000000..c24c48b7f3 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarCell.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarCellTrigger.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarCellTrigger.vue new file mode 100644 index 0000000000..ddb8dc577c --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarCellTrigger.vue @@ -0,0 +1,39 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarGrid.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarGrid.vue new file mode 100644 index 0000000000..e6dd7d6b93 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarGrid.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarGridBody.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarGridBody.vue new file mode 100644 index 0000000000..3b9e716a6e --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarGridBody.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarGridHead.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarGridHead.vue new file mode 100644 index 0000000000..de1589b605 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarGridHead.vue @@ -0,0 +1,16 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarGridRow.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarGridRow.vue new file mode 100644 index 0000000000..767557d872 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarGridRow.vue @@ -0,0 +1,22 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarHeadCell.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarHeadCell.vue new file mode 100644 index 0000000000..47fefbc7a9 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarHeadCell.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarHeader.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarHeader.vue new file mode 100644 index 0000000000..175118dbfd --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarHeader.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarHeading.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarHeading.vue new file mode 100644 index 0000000000..5a11c12f59 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarHeading.vue @@ -0,0 +1,30 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarNextButton.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarNextButton.vue new file mode 100644 index 0000000000..8552ffa3fa --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarNextButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/CalendarPrevButton.vue b/frontend/app/web-gold/src/components/ui/calendar/CalendarPrevButton.vue new file mode 100644 index 0000000000..b643948a65 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/CalendarPrevButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/calendar/index.ts b/frontend/app/web-gold/src/components/ui/calendar/index.ts new file mode 100644 index 0000000000..552c634b7f --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/calendar/index.ts @@ -0,0 +1,14 @@ +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" + +export type LayoutTypes = "month-and-year" | "month-only" | "year-only" | undefined diff --git a/frontend/app/web-gold/src/components/ui/card/Card.vue b/frontend/app/web-gold/src/components/ui/card/Card.vue new file mode 100644 index 0000000000..f5a070702a --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/Card.vue @@ -0,0 +1,22 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/card/CardAction.vue b/frontend/app/web-gold/src/components/ui/card/CardAction.vue new file mode 100644 index 0000000000..c91638b6d1 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/CardAction.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/card/CardContent.vue b/frontend/app/web-gold/src/components/ui/card/CardContent.vue new file mode 100644 index 0000000000..dfbc5524ec --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/CardContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/card/CardDescription.vue b/frontend/app/web-gold/src/components/ui/card/CardDescription.vue new file mode 100644 index 0000000000..71c1b8da44 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/CardDescription.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/card/CardFooter.vue b/frontend/app/web-gold/src/components/ui/card/CardFooter.vue new file mode 100644 index 0000000000..9e3739ed66 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/CardFooter.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/card/CardHeader.vue b/frontend/app/web-gold/src/components/ui/card/CardHeader.vue new file mode 100644 index 0000000000..4fe4da46c5 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/CardHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/card/CardTitle.vue b/frontend/app/web-gold/src/components/ui/card/CardTitle.vue new file mode 100644 index 0000000000..5f479e7305 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/CardTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/card/index.ts b/frontend/app/web-gold/src/components/ui/card/index.ts new file mode 100644 index 0000000000..16277580b2 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/card/index.ts @@ -0,0 +1,7 @@ +export { default as Card } from "./Card.vue" +export { default as CardAction } from "./CardAction.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/frontend/app/web-gold/src/components/ui/carousel/Carousel.vue b/frontend/app/web-gold/src/components/ui/carousel/Carousel.vue new file mode 100644 index 0000000000..4575682ae8 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/carousel/Carousel.vue @@ -0,0 +1,53 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/carousel/CarouselContent.vue b/frontend/app/web-gold/src/components/ui/carousel/CarouselContent.vue new file mode 100644 index 0000000000..bd3db7e7b2 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/carousel/CarouselContent.vue @@ -0,0 +1,33 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/carousel/CarouselItem.vue b/frontend/app/web-gold/src/components/ui/carousel/CarouselItem.vue new file mode 100644 index 0000000000..39df4c63eb --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/carousel/CarouselItem.vue @@ -0,0 +1,24 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/carousel/CarouselNext.vue b/frontend/app/web-gold/src/components/ui/carousel/CarouselNext.vue new file mode 100644 index 0000000000..63d5ebc57b --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/carousel/CarouselNext.vue @@ -0,0 +1,41 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/carousel/CarouselPrevious.vue b/frontend/app/web-gold/src/components/ui/carousel/CarouselPrevious.vue new file mode 100644 index 0000000000..1473a66ec7 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/carousel/CarouselPrevious.vue @@ -0,0 +1,41 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/carousel/index.ts b/frontend/app/web-gold/src/components/ui/carousel/index.ts new file mode 100644 index 0000000000..154bfcbe91 --- /dev/null +++ b/frontend/app/web-gold/src/components/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 type { + UnwrapRefCarouselApi as CarouselApi, +} from "./interface" + +export { useCarousel } from "./useCarousel" diff --git a/frontend/app/web-gold/src/components/ui/carousel/interface.ts b/frontend/app/web-gold/src/components/ui/carousel/interface.ts new file mode 100644 index 0000000000..74eaf36d00 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/carousel/interface.ts @@ -0,0 +1,26 @@ +import type useEmblaCarousel from "embla-carousel-vue" +import type { + EmblaCarouselVueType, +} from "embla-carousel-vue" +import type { HTMLAttributes, UnwrapRef } from "vue" + +type CarouselApi = EmblaCarouselVueType[1] +type UseCarouselParameters = Parameters +type CarouselOptions = UseCarouselParameters[0] +type CarouselPlugin = UseCarouselParameters[1] + +export type UnwrapRefCarouselApi = UnwrapRef + +export interface CarouselProps { + opts?: CarouselOptions + plugins?: CarouselPlugin + orientation?: "horizontal" | "vertical" +} + +export interface CarouselEmits { + (e: "init-api", payload: UnwrapRefCarouselApi): void +} + +export interface WithClassAsProps { + class?: HTMLAttributes["class"] +} diff --git a/frontend/app/web-gold/src/components/ui/carousel/useCarousel.ts b/frontend/app/web-gold/src/components/ui/carousel/useCarousel.ts new file mode 100644 index 0000000000..32e35ca09f --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/carousel/useCarousel.ts @@ -0,0 +1,56 @@ +import type { UnwrapRefCarouselApi as CarouselApi, 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(false) + const canScrollPrev = ref(false) + + function onSelect(api: CarouselApi) { + canScrollNext.value = api?.canScrollNext() || false + canScrollPrev.value = api?.canScrollPrev() || false + } + + 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/frontend/app/web-gold/src/components/ui/chart/ChartContainer.vue b/frontend/app/web-gold/src/components/ui/chart/ChartContainer.vue new file mode 100644 index 0000000000..b4357f9186 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/chart/ChartContainer.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/frontend/app/web-gold/src/components/ui/chart/ChartLegendContent.vue b/frontend/app/web-gold/src/components/ui/chart/ChartLegendContent.vue new file mode 100644 index 0000000000..32773128c8 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/chart/ChartLegendContent.vue @@ -0,0 +1,60 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/chart/ChartStyle.vue b/frontend/app/web-gold/src/components/ui/chart/ChartStyle.vue new file mode 100644 index 0000000000..d6f59dd404 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/chart/ChartStyle.vue @@ -0,0 +1,42 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/chart/ChartTooltipContent.vue b/frontend/app/web-gold/src/components/ui/chart/ChartTooltipContent.vue new file mode 100644 index 0000000000..e3fa3bcf7e --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/chart/ChartTooltipContent.vue @@ -0,0 +1,105 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/chart/index.ts b/frontend/app/web-gold/src/components/ui/chart/index.ts new file mode 100644 index 0000000000..12b8062760 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/chart/index.ts @@ -0,0 +1,29 @@ +import type { Component, Ref } from "vue" +import { createContext } from "reka-ui" + +export { default as ChartContainer } from "./ChartContainer.vue" +export { default as ChartLegendContent } from "./ChartLegendContent.vue" +export { default as ChartTooltipContent } from "./ChartTooltipContent.vue" +export { componentToString } from "./utils" + +// Format: { THEME_NAME: CSS_SELECTOR } +export const THEMES = { light: "", dark: ".dark" } as const + +export type ChartConfig = { + [k in string]: { + label?: string | Component + icon?: string | Component + } & ( + | { color?: string, theme?: never } + | { color?: never, theme: Record } + ) +} + +interface ChartContextProps { + id: string + config: Ref +} + +export const [useChart, provideChartContext] = createContext("Chart") + +export { VisCrosshair as ChartCrosshair, VisTooltip as ChartTooltip } from "@unovis/vue" diff --git a/frontend/app/web-gold/src/components/ui/chart/utils.ts b/frontend/app/web-gold/src/components/ui/chart/utils.ts new file mode 100644 index 0000000000..b6d0652683 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/chart/utils.ts @@ -0,0 +1,44 @@ +import type { ChartConfig } from "." +import { isClient } from "@vueuse/core" +import { useId } from "reka-ui" +import { h, render } from "vue" + +// Simple cache using a Map to store serialized object keys +const cache = new Map() + +// Convert object to a consistent string key +function serializeKey(key: Record): string { + return JSON.stringify(key, Object.keys(key).sort()) +} + +interface Constructor

{ + __isFragment?: never + __isTeleport?: never + __isSuspense?: never + new (...args: any[]): { + $props: P + } +} + +export function componentToString

(config: ChartConfig, component: Constructor

, props?: P) { + if (!isClient) + return + + // This function will be called once during mount lifecycle + const id = useId() + + // https://unovis.dev/docs/auxiliary/Crosshair#component-props + return (_data: any, x: number | Date) => { + const data = "data" in _data ? _data.data : _data + const serializedKey = `${id}-${serializeKey(data)}` + const cachedContent = cache.get(serializedKey) + if (cachedContent) + return cachedContent + + const vnode = h(component, { ...props, payload: data, config, x }) + const div = document.createElement("div") + render(vnode, div) + cache.set(serializedKey, div.innerHTML) + return div.innerHTML + } +} diff --git a/frontend/app/web-gold/src/components/ui/combobox/Combobox.vue b/frontend/app/web-gold/src/components/ui/combobox/Combobox.vue new file mode 100644 index 0000000000..0e6907c438 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/Combobox.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxAnchor.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxAnchor.vue new file mode 100644 index 0000000000..5b9041d420 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxAnchor.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxEmpty.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxEmpty.vue new file mode 100644 index 0000000000..20beb63bf4 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxEmpty.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxGroup.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxGroup.vue new file mode 100644 index 0000000000..0dc9fc5b25 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxGroup.vue @@ -0,0 +1,27 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxInput.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxInput.vue new file mode 100644 index 0000000000..9c783246d1 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxInput.vue @@ -0,0 +1,42 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxItem.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItem.vue new file mode 100644 index 0000000000..cccf98ca60 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItem.vue @@ -0,0 +1,24 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxItemIndicator.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItemIndicator.vue new file mode 100644 index 0000000000..2e1b07cac9 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItemIndicator.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxList.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxList.vue new file mode 100644 index 0000000000..64c9a845ba --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxList.vue @@ -0,0 +1,33 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxSeparator.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxSeparator.vue new file mode 100644 index 0000000000..05d648b460 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxTrigger.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxTrigger.vue new file mode 100644 index 0000000000..28b099aa25 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxTrigger.vue @@ -0,0 +1,24 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxViewport.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxViewport.vue new file mode 100644 index 0000000000..684085cc58 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxViewport.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/combobox/index.ts b/frontend/app/web-gold/src/components/ui/combobox/index.ts new file mode 100644 index 0000000000..7c7bfc7852 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/combobox/index.ts @@ -0,0 +1,12 @@ +export { default as Combobox } from "./Combobox.vue" +export { default as ComboboxAnchor } from "./ComboboxAnchor.vue" +export { default as ComboboxEmpty } from "./ComboboxEmpty.vue" +export { default as ComboboxGroup } from "./ComboboxGroup.vue" +export { default as ComboboxInput } from "./ComboboxInput.vue" +export { default as ComboboxItem } from "./ComboboxItem.vue" +export { default as ComboboxItemIndicator } from "./ComboboxItemIndicator.vue" +export { default as ComboboxList } from "./ComboboxList.vue" +export { default as ComboboxSeparator } from "./ComboboxSeparator.vue" +export { default as ComboboxViewport } from "./ComboboxViewport.vue" + +export { ComboboxCancel, ComboboxTrigger } from "reka-ui" diff --git a/frontend/app/web-gold/src/components/ui/command/Command.vue b/frontend/app/web-gold/src/components/ui/command/Command.vue new file mode 100644 index 0000000000..dcdf9d6031 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/Command.vue @@ -0,0 +1,87 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandDialog.vue b/frontend/app/web-gold/src/components/ui/command/CommandDialog.vue new file mode 100644 index 0000000000..a48f018b8f --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandDialog.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandEmpty.vue b/frontend/app/web-gold/src/components/ui/command/CommandEmpty.vue new file mode 100644 index 0000000000..489c4064de --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandEmpty.vue @@ -0,0 +1,27 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandGroup.vue b/frontend/app/web-gold/src/components/ui/command/CommandGroup.vue new file mode 100644 index 0000000000..a5dd55e345 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandGroup.vue @@ -0,0 +1,45 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandInput.vue b/frontend/app/web-gold/src/components/ui/command/CommandInput.vue new file mode 100644 index 0000000000..653141e4d2 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandInput.vue @@ -0,0 +1,39 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandItem.vue b/frontend/app/web-gold/src/components/ui/command/CommandItem.vue new file mode 100644 index 0000000000..2ae4827d12 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandItem.vue @@ -0,0 +1,76 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandList.vue b/frontend/app/web-gold/src/components/ui/command/CommandList.vue new file mode 100644 index 0000000000..928d2f0f7b --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandList.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandSeparator.vue b/frontend/app/web-gold/src/components/ui/command/CommandSeparator.vue new file mode 100644 index 0000000000..6def19ecef --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/CommandShortcut.vue b/frontend/app/web-gold/src/components/ui/command/CommandShortcut.vue new file mode 100644 index 0000000000..e1d0e07afd --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/CommandShortcut.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/command/index.ts b/frontend/app/web-gold/src/components/ui/command/index.ts new file mode 100644 index 0000000000..af18933b6b --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/command/index.ts @@ -0,0 +1,25 @@ +import type { Ref } from "vue" +import { createContext } from "reka-ui" + +export { default as Command } from "./Command.vue" +export { default as CommandDialog } from "./CommandDialog.vue" +export { default as CommandEmpty } from "./CommandEmpty.vue" +export { default as CommandGroup } from "./CommandGroup.vue" +export { default as CommandInput } from "./CommandInput.vue" +export { default as CommandItem } from "./CommandItem.vue" +export { default as CommandList } from "./CommandList.vue" +export { default as CommandSeparator } from "./CommandSeparator.vue" +export { default as CommandShortcut } from "./CommandShortcut.vue" + +export const [useCommand, provideCommandContext] = createContext<{ + allItems: Ref> + allGroups: Ref>> + filterState: { + search: string + filtered: { count: number, items: Map, groups: Set } + } +}>("Command") + +export const [useCommandGroup, provideCommandGroupContext] = createContext<{ + id?: string +}>("CommandGroup") diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenu.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenu.vue new file mode 100644 index 0000000000..b4c6c09345 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenu.vue @@ -0,0 +1,18 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuCheckboxItem.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuCheckboxItem.vue new file mode 100644 index 0000000000..ba62d4314c --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuCheckboxItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuContent.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuContent.vue new file mode 100644 index 0000000000..2fbc5568ce --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuContent.vue @@ -0,0 +1,37 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuGroup.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuGroup.vue new file mode 100644 index 0000000000..9af9b2665c --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuGroup.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuItem.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuItem.vue new file mode 100644 index 0000000000..b6a4c48e54 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuItem.vue @@ -0,0 +1,38 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuLabel.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuLabel.vue new file mode 100644 index 0000000000..80d051957a --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuLabel.vue @@ -0,0 +1,22 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuPortal.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuPortal.vue new file mode 100644 index 0000000000..c50a2b3306 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuPortal.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioGroup.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioGroup.vue new file mode 100644 index 0000000000..25372ed829 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioGroup.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioItem.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioItem.vue new file mode 100644 index 0000000000..181acaa876 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSeparator.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSeparator.vue new file mode 100644 index 0000000000..d7f0c60f04 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuShortcut.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuShortcut.vue new file mode 100644 index 0000000000..2631d68261 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuShortcut.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSub.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSub.vue new file mode 100644 index 0000000000..aeb1835ccc --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSub.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubContent.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubContent.vue new file mode 100644 index 0000000000..c4fcafdad2 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubContent.vue @@ -0,0 +1,32 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubTrigger.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubTrigger.vue new file mode 100644 index 0000000000..12d2210e9c --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubTrigger.vue @@ -0,0 +1,32 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuTrigger.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuTrigger.vue new file mode 100644 index 0000000000..70a8143ff9 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuTrigger.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/context-menu/index.ts b/frontend/app/web-gold/src/components/ui/context-menu/index.ts new file mode 100644 index 0000000000..5919fd37d5 --- /dev/null +++ b/frontend/app/web-gold/src/components/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/frontend/app/web-gold/src/components/ui/dialog/Dialog.vue b/frontend/app/web-gold/src/components/ui/dialog/Dialog.vue new file mode 100644 index 0000000000..ade5260377 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/Dialog.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogClose.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogClose.vue new file mode 100644 index 0000000000..c5fae043f7 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogClose.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogContent.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogContent.vue new file mode 100644 index 0000000000..7f86b47787 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogContent.vue @@ -0,0 +1,53 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogDescription.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogDescription.vue new file mode 100644 index 0000000000..f52e6555e9 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogDescription.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogFooter.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogFooter.vue new file mode 100644 index 0000000000..0a936e6166 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogFooter.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogHeader.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogHeader.vue new file mode 100644 index 0000000000..bfc3c646e6 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogOverlay.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogOverlay.vue new file mode 100644 index 0000000000..77900772a0 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogOverlay.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogScrollContent.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogScrollContent.vue new file mode 100644 index 0000000000..f2475dbaed --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogScrollContent.vue @@ -0,0 +1,59 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogTitle.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogTitle.vue new file mode 100644 index 0000000000..860f01a486 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogTitle.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogTrigger.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogTrigger.vue new file mode 100644 index 0000000000..49667e997b --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/DialogTrigger.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dialog/index.ts b/frontend/app/web-gold/src/components/ui/dialog/index.ts new file mode 100644 index 0000000000..6768b090cc --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dialog/index.ts @@ -0,0 +1,10 @@ +export { default as Dialog } from "./Dialog.vue" +export { default as DialogClose } from "./DialogClose.vue" +export { default as DialogContent } from "./DialogContent.vue" +export { default as DialogDescription } from "./DialogDescription.vue" +export { default as DialogFooter } from "./DialogFooter.vue" +export { default as DialogHeader } from "./DialogHeader.vue" +export { default as DialogOverlay } from "./DialogOverlay.vue" +export { default as DialogScrollContent } from "./DialogScrollContent.vue" +export { default as DialogTitle } from "./DialogTitle.vue" +export { default as DialogTrigger } from "./DialogTrigger.vue" diff --git a/frontend/app/web-gold/src/components/ui/drawer/Drawer.vue b/frontend/app/web-gold/src/components/ui/drawer/Drawer.vue new file mode 100644 index 0000000000..5428e35c16 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/Drawer.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerClose.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerClose.vue new file mode 100644 index 0000000000..eecc11b7f0 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerClose.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerContent.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerContent.vue new file mode 100644 index 0000000000..5994c854cd --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerContent.vue @@ -0,0 +1,38 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerDescription.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerDescription.vue new file mode 100644 index 0000000000..77e69ba351 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerDescription.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerFooter.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerFooter.vue new file mode 100644 index 0000000000..34c2e1217e --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerFooter.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerHeader.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerHeader.vue new file mode 100644 index 0000000000..f68aeb059e --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerOverlay.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerOverlay.vue new file mode 100644 index 0000000000..e7e4a05ab7 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerOverlay.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerTitle.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerTitle.vue new file mode 100644 index 0000000000..328fb0d21d --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerTitle.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerTrigger.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerTrigger.vue new file mode 100644 index 0000000000..04b5bf13b5 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerTrigger.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/drawer/index.ts b/frontend/app/web-gold/src/components/ui/drawer/index.ts new file mode 100644 index 0000000000..0d07820d6f --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/drawer/index.ts @@ -0,0 +1,9 @@ +export { default as Drawer } from "./Drawer.vue" +export { default as DrawerClose } from "./DrawerClose.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 { default as DrawerTrigger } from "./DrawerTrigger.vue" diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenu.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenu.vue new file mode 100644 index 0000000000..e1c9ee3043 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 0000000000..1253078dcc --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuContent.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 0000000000..7c43014137 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,39 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuGroup.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 0000000000..da634ec099 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuItem.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 0000000000..f56cae3e73 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuLabel.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 0000000000..8bca83c434 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 0000000000..fe82cadd73 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 0000000000..e03c40c5a8 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,40 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 0000000000..1b936c392d --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 0000000000..60be75cc9d --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSub.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 0000000000..7472e77f53 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,18 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 0000000000..d7c6b087df --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,27 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 0000000000..0906491160 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 0000000000..75cd7472ce --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/index.ts b/frontend/app/web-gold/src/components/ui/dropdown-menu/index.ts new file mode 100644 index 0000000000..955fe3aa08 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/index.ts @@ -0,0 +1,16 @@ +export { default as DropdownMenu } from "./DropdownMenu.vue" + +export { default as DropdownMenuCheckboxItem } from "./DropdownMenuCheckboxItem.vue" +export { default as DropdownMenuContent } from "./DropdownMenuContent.vue" +export { default as DropdownMenuGroup } from "./DropdownMenuGroup.vue" +export { default as DropdownMenuItem } from "./DropdownMenuItem.vue" +export { default as DropdownMenuLabel } from "./DropdownMenuLabel.vue" +export { default as DropdownMenuRadioGroup } from "./DropdownMenuRadioGroup.vue" +export { default as DropdownMenuRadioItem } from "./DropdownMenuRadioItem.vue" +export { default as DropdownMenuSeparator } from "./DropdownMenuSeparator.vue" +export { default as DropdownMenuShortcut } from "./DropdownMenuShortcut.vue" +export { default as DropdownMenuSub } from "./DropdownMenuSub.vue" +export { default as DropdownMenuSubContent } from "./DropdownMenuSubContent.vue" +export { default as DropdownMenuSubTrigger } from "./DropdownMenuSubTrigger.vue" +export { default as DropdownMenuTrigger } from "./DropdownMenuTrigger.vue" +export { DropdownMenuPortal } from "reka-ui" diff --git a/frontend/app/web-gold/src/components/ui/empty/Empty.vue b/frontend/app/web-gold/src/components/ui/empty/Empty.vue new file mode 100644 index 0000000000..2637b3c7bf --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/empty/Empty.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyContent.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyContent.vue new file mode 100644 index 0000000000..d19ee0003a --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/empty/EmptyContent.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyDescription.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyDescription.vue new file mode 100644 index 0000000000..e4ed5fb712 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/empty/EmptyDescription.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyHeader.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyHeader.vue new file mode 100644 index 0000000000..ac21d8c892 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/empty/EmptyHeader.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyMedia.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyMedia.vue new file mode 100644 index 0000000000..c68397c0c7 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/empty/EmptyMedia.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyTitle.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyTitle.vue new file mode 100644 index 0000000000..90c950d29f --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/empty/EmptyTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/empty/index.ts b/frontend/app/web-gold/src/components/ui/empty/index.ts new file mode 100644 index 0000000000..ce0c489f23 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/empty/index.ts @@ -0,0 +1,26 @@ +import type { VariantProps } from "class-variance-authority" +import { cva } from "class-variance-authority" + +export { default as Empty } from "./Empty.vue" +export { default as EmptyContent } from "./EmptyContent.vue" +export { default as EmptyDescription } from "./EmptyDescription.vue" +export { default as EmptyHeader } from "./EmptyHeader.vue" +export { default as EmptyMedia } from "./EmptyMedia.vue" +export { default as EmptyTitle } from "./EmptyTitle.vue" + +export const emptyMediaVariants = cva( + "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", + { + variants: { + variant: { + default: "bg-transparent", + icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +) + +export type EmptyMediaVariants = VariantProps diff --git a/frontend/app/web-gold/src/components/ui/field/Field.vue b/frontend/app/web-gold/src/components/ui/field/Field.vue new file mode 100644 index 0000000000..5519d3705b --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/Field.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldContent.vue b/frontend/app/web-gold/src/components/ui/field/FieldContent.vue new file mode 100644 index 0000000000..d9a23fd751 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldContent.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldDescription.vue b/frontend/app/web-gold/src/components/ui/field/FieldDescription.vue new file mode 100644 index 0000000000..7240a837d6 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldDescription.vue @@ -0,0 +1,22 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldError.vue b/frontend/app/web-gold/src/components/ui/field/FieldError.vue new file mode 100644 index 0000000000..8a0a63f027 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldError.vue @@ -0,0 +1,53 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldGroup.vue b/frontend/app/web-gold/src/components/ui/field/FieldGroup.vue new file mode 100644 index 0000000000..834d8ced79 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldGroup.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldLabel.vue b/frontend/app/web-gold/src/components/ui/field/FieldLabel.vue new file mode 100644 index 0000000000..e2692ecd4c --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldLabel.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldLegend.vue b/frontend/app/web-gold/src/components/ui/field/FieldLegend.vue new file mode 100644 index 0000000000..c620fed431 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldLegend.vue @@ -0,0 +1,24 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldSeparator.vue b/frontend/app/web-gold/src/components/ui/field/FieldSeparator.vue new file mode 100644 index 0000000000..5bca4d50f7 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldSeparator.vue @@ -0,0 +1,29 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldSet.vue b/frontend/app/web-gold/src/components/ui/field/FieldSet.vue new file mode 100644 index 0000000000..7be4dc9e77 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldSet.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/FieldTitle.vue b/frontend/app/web-gold/src/components/ui/field/FieldTitle.vue new file mode 100644 index 0000000000..f564b8b8a0 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/FieldTitle.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/field/index.ts b/frontend/app/web-gold/src/components/ui/field/index.ts new file mode 100644 index 0000000000..162ba14de2 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/field/index.ts @@ -0,0 +1,39 @@ +import type { VariantProps } from "class-variance-authority" +import { cva } from "class-variance-authority" + +export const fieldVariants = cva( + "group/field flex w-full gap-3 data-[invalid=true]:text-destructive", + { + variants: { + orientation: { + vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"], + horizontal: [ + "flex-row items-center", + "[&>[data-slot=field-label]]:flex-auto", + "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", + ], + responsive: [ + "flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto", + "@md/field-group:[&>[data-slot=field-label]]:flex-auto", + "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", + ], + }, + }, + defaultVariants: { + orientation: "vertical", + }, + }, +) + +export type FieldVariants = VariantProps + +export { default as Field } from "./Field.vue" +export { default as FieldContent } from "./FieldContent.vue" +export { default as FieldDescription } from "./FieldDescription.vue" +export { default as FieldError } from "./FieldError.vue" +export { default as FieldGroup } from "./FieldGroup.vue" +export { default as FieldLabel } from "./FieldLabel.vue" +export { default as FieldLegend } from "./FieldLegend.vue" +export { default as FieldSeparator } from "./FieldSeparator.vue" +export { default as FieldSet } from "./FieldSet.vue" +export { default as FieldTitle } from "./FieldTitle.vue" diff --git a/frontend/app/web-gold/src/components/ui/form/FormControl.vue b/frontend/app/web-gold/src/components/ui/form/FormControl.vue new file mode 100644 index 0000000000..b1bc4bfadb --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/form/FormControl.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/form/FormDescription.vue b/frontend/app/web-gold/src/components/ui/form/FormDescription.vue new file mode 100644 index 0000000000..2d3a903dc4 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/form/FormDescription.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/form/FormItem.vue b/frontend/app/web-gold/src/components/ui/form/FormItem.vue new file mode 100644 index 0000000000..40cb994da8 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/form/FormItem.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/form/FormLabel.vue b/frontend/app/web-gold/src/components/ui/form/FormLabel.vue new file mode 100644 index 0000000000..d5475f7d4d --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/form/FormLabel.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/form/FormMessage.vue b/frontend/app/web-gold/src/components/ui/form/FormMessage.vue new file mode 100644 index 0000000000..c80c482d7d --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/form/FormMessage.vue @@ -0,0 +1,23 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/form/index.ts b/frontend/app/web-gold/src/components/ui/form/index.ts new file mode 100644 index 0000000000..1eb05f11a3 --- /dev/null +++ b/frontend/app/web-gold/src/components/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/frontend/app/web-gold/src/components/ui/form/injectionKeys.ts b/frontend/app/web-gold/src/components/ui/form/injectionKeys.ts new file mode 100644 index 0000000000..42542a96f7 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/form/injectionKeys.ts @@ -0,0 +1,4 @@ +import type { InjectionKey } from "vue" + +export const FORM_ITEM_INJECTION_KEY + = Symbol() as InjectionKey diff --git a/frontend/app/web-gold/src/components/ui/form/useFormField.ts b/frontend/app/web-gold/src/components/ui/form/useFormField.ts new file mode 100644 index 0000000000..62d86c268f --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/form/useFormField.ts @@ -0,0 +1,30 @@ +import { FieldContextKey } from "vee-validate" +import { computed, inject } from "vue" +import { FORM_ITEM_INJECTION_KEY } from "./injectionKeys" + +export function useFormField() { + const fieldContext = inject(FieldContextKey) + const fieldItemContext = inject(FORM_ITEM_INJECTION_KEY) + + if (!fieldContext) + throw new Error("useFormField should be used within ") + + const { name, errorMessage: error, meta } = fieldContext + const id = fieldItemContext + + const fieldState = { + valid: computed(() => meta.valid), + isDirty: computed(() => meta.dirty), + isTouched: computed(() => meta.touched), + error, + } + + return { + id, + name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } +} diff --git a/frontend/app/web-gold/src/components/ui/hover-card/HoverCard.vue b/frontend/app/web-gold/src/components/ui/hover-card/HoverCard.vue new file mode 100644 index 0000000000..07d11e6058 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/hover-card/HoverCard.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/hover-card/HoverCardContent.vue b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardContent.vue new file mode 100644 index 0000000000..2a3c55336d --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardContent.vue @@ -0,0 +1,43 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/hover-card/HoverCardTrigger.vue b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardTrigger.vue new file mode 100644 index 0000000000..0a0900192f --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardTrigger.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/hover-card/index.ts b/frontend/app/web-gold/src/components/ui/hover-card/index.ts new file mode 100644 index 0000000000..49b2930d28 --- /dev/null +++ b/frontend/app/web-gold/src/components/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/frontend/app/web-gold/src/components/ui/input-group/InputGroup.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroup.vue new file mode 100644 index 0000000000..d32d69d4a7 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroup.vue @@ -0,0 +1,35 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupAddon.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupAddon.vue new file mode 100644 index 0000000000..709f482a35 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupAddon.vue @@ -0,0 +1,36 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupButton.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupButton.vue new file mode 100644 index 0000000000..26dcdb8d12 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupButton.vue @@ -0,0 +1,29 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupInput.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupInput.vue new file mode 100644 index 0000000000..5fcff43bb5 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupInput.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupText.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupText.vue new file mode 100644 index 0000000000..e317337966 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupText.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupTextarea.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupTextarea.vue new file mode 100644 index 0000000000..596beba1c5 --- /dev/null +++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupTextarea.vue @@ -0,0 +1,19 @@ + + +