diff --git a/app/components/ui/badge/Badge.vue b/app/components/ui/badge/Badge.vue new file mode 100644 index 0000000..d894dfe --- /dev/null +++ b/app/components/ui/badge/Badge.vue @@ -0,0 +1,26 @@ + + + diff --git a/app/components/ui/badge/index.ts b/app/components/ui/badge/index.ts new file mode 100644 index 0000000..bbc0dfa --- /dev/null +++ b/app/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/app/components/ui/internal/MediaImageCard.vue b/app/components/ui/internal/MediaImageCard.vue index 70ea1f8..5da3bbf 100644 --- a/app/components/ui/internal/MediaImageCard.vue +++ b/app/components/ui/internal/MediaImageCard.vue @@ -1,6 +1,8 @@ diff --git a/app/components/ui/tooltip/TooltipContent.vue b/app/components/ui/tooltip/TooltipContent.vue index c5d2df9..995364b 100644 --- a/app/components/ui/tooltip/TooltipContent.vue +++ b/app/components/ui/tooltip/TooltipContent.vue @@ -6,11 +6,18 @@ import { TooltipArrow, TooltipContent, TooltipPortal, useForwardPropsEmits } fro import { cn } from "@/lib/utils" defineOptions({ - inheritAttrs: false, + inheritAttrs: false, }) -const props = withDefaults(defineProps(), { - sideOffset: 4, +interface Props { + includeArrow?: boolean + class?: HTMLAttributes["class"] + arrowClass?: HTMLAttributes["class"] +} + +const props = withDefaults(defineProps(), { + sideOffset: 4, + includeArrow: true }) const emits = defineEmits() @@ -20,15 +27,14 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits) diff --git a/app/layouts/default.vue b/app/layouts/default.vue index c78dd4e..0e67e43 100644 --- a/app/layouts/default.vue +++ b/app/layouts/default.vue @@ -1,16 +1,18 @@ @@ -19,7 +21,10 @@ import 'vue-sonner/style.css' import Sonner from '@/components/ui/sonner/Sonner.vue'; import AppHeader from '@/components/ui/internal/AppHeader.vue'; -import Headroom from "headroom.js"; import ThemeProvider from '~/components/ui/provider/ThemeProvider.vue'; +import Headroom from "headroom.js"; +import ThemeProvider from '~/components/ui/provider/ThemeProvider.vue'; +import TooltipProvider from '~/components/ui/tooltip/TooltipProvider.vue'; + const header = ref(null); diff --git a/app/pages/index.vue b/app/pages/index.vue index 84507fe..2f06d74 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -4,6 +4,7 @@ import HeroSection from '@/components/ui/internal/HeroSection.vue'; import MediaImageCard from '~/components/ui/internal/MediaImageCard.vue'; import SkeletonMediaImageCard from '~/components/ui/internal/SkeletonMediaImageCard.vue'; +const tooltipCollisionBoundary = ref(undefined);