diff options
Diffstat (limited to 'frontend/src/lib/components/ui/alert/alert.svelte')
| -rw-r--r-- | frontend/src/lib/components/ui/alert/alert.svelte | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/frontend/src/lib/components/ui/alert/alert.svelte b/frontend/src/lib/components/ui/alert/alert.svelte new file mode 100644 index 0000000..e8f3489 --- /dev/null +++ b/frontend/src/lib/components/ui/alert/alert.svelte @@ -0,0 +1,43 @@ +<script lang="ts" module> + import { type VariantProps, tv } from "tailwind-variants"; + + export const alertVariants = tv({ + base: "grid gap-0.5 rounded-lg border px-2 py-1.5 text-left text-xs/relaxed has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-1.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-3.5 group/alert relative w-full", + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: "text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current", + }, + }, + defaultVariants: { + variant: "default", + }, + }); + + export type AlertVariant = VariantProps<typeof alertVariants>["variant"]; +</script> + +<script lang="ts"> + import { cn, type WithElementRef } from "$lib/utils.js"; + import type { HTMLAttributes } from "svelte/elements"; + + let { + ref = $bindable(null), + class: className, + variant = "default", + children, + ...restProps + }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { + variant?: AlertVariant; + } = $props(); +</script> + +<div + bind:this={ref} + data-slot="alert" + role="alert" + class={cn(alertVariants({ variant }), className)} + {...restProps} +> + {@render children?.()} +</div> |
