/
ncit
/
c4panelmodel
Обзор
Документация
Войти
/
ncit
/
c4panelmodel
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/lib/components/ui/Button.svelte
51 строка
1 KB
ncit
feat: rewrite hooks.server.ts to use Supabase Auth
07 июн 2026, 19:32
07 июн 2026, 19:32
b6162ab
Код
Авторство
О чём код?
<script lang="ts"> import { cn } from '$lib/utils/cn'; import type { Snippet } from 'svelte'; import type { HTMLButtonAttributes } from 'svelte/elements'; type Variant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'outline'; type Size = 'sm' | 'md' | 'lg' | 'icon'; interface Props extends HTMLButtonAttributes { variant?: Variant; size?: Size; href?: string; children: Snippet; class?: string; } let { variant = 'primary', size = 'md', href, class: klass, children, ...rest }: Props = $props(); const base = 'inline-flex items-center justify-center gap-2 rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none whitespace-nowrap'; const variants: Record<Variant, string> = { primary: 'bg-blue-600 text-white hover:bg-blue-700', secondary: 'bg-slate-100 text-slate-900 hover:bg-slate-200', outline: 'border border-slate-300 text-slate-700 hover:bg-slate-50', ghost: 'text-slate-600 hover:bg-slate-100', danger: 'bg-red-600 text-white hover:bg-red-700' }; const sizes: Record<Size, string> = { sm: 'h-8 px-3 text-sm', md: 'h-10 px-4 text-sm', lg: 'h-11 px-6 text-base', icon: 'h-9 w-9' }; const classes = $derived(cn(base, variants[variant], sizes[size], klass)); </script> {#if href} <a {href} class={classes} {...rest as any}>{@render children()}</a> {:else} <button class={classes} {...rest}>{@render children()}</button> {/if}