svelte-5-ui-lib
Version:
Svelte 5 UI Lib is a UI library built from scratch to leverage Svelte 5's runes system, creating smooth, reactive components.
69 lines (68 loc) • 3.23 kB
JavaScript
import { tv } from 'tailwind-variants';
const banner = tv({
slots: {
base: 'z-10 flex justify-between p-4 dark:bg-gray-700 dark:border-gray-600',
insideDiv: 'flex items-center'
},
variants: {
position: {
// "static" | "fixed" | "absolute" | "relative" | "sticky"
static: { base: 'static' },
fixed: { base: 'fixed' },
absolute: { base: 'absolute' },
relative: { base: 'relative' },
sticky: { base: 'sticky' }
},
bannerType: {
// "default" | "bottom" | "cta" | "signup" | "info"
default: {
base: 'top-0 start-0 w-full border-b border-gray-200 bg-gray-50',
insideDiv: 'mx-auto'
},
bottom: {
base: 'bottom-0 start-0 w-full border-t border-gray-200 bg-gray-50',
insideDiv: 'mx-auto'
},
cta: {
base: 'flex-col md:flex-row w-[calc(100%-2rem)] -translate-x-1/2 rtl:translate-x-1/2 bg-white border border-gray-100 rounded-lg shadow-sm lg:max-w-7xl start-1/2 top-6',
insideDiv: 'flex-col items-start mb-3 me-4 md:items-center md:flex-row md:mb-0'
},
signup: {
base: 'top-0 start-0 w-full border-b border-gray-200 bg-gray-50',
insideDiv: 'flex-shrink-0 w-full mx-auto sm:w-auto'
},
info: {
base: 'top-0 start-0 flex-col w-full border-b border-gray-200 md:flex-row bg-gray-50',
insideDiv: 'flex-shrink-0'
}
},
color: {
// 'primary' secondary, | 'gray' | 'red' | 'orange' | 'amber' | 'yellow' | 'lime' | 'green' | 'emerald' | 'teal' | 'cyan' | 'sky' | 'blue' | 'indigo' | 'violet' | 'purple' | 'fuchsia' | 'pink' | 'rose'
primary: { base: 'bg-primary-50 dark:bg-primary-900' },
secondary: { base: 'bg-secondary-50 dark:bg-secondary-900' },
gray: { base: 'bg-gray-50 dark:bg-gray-700' },
red: { base: 'bg-red-50 dark:bg-red-900' },
orange: { base: 'bg-orange-50 dark:bg-orange-900' },
amber: { base: 'bg-amber-50 dark:bg-amber-900' },
yellow: { base: 'bg-yellow-50 dark:bg-yellow-900' },
lime: { base: 'bg-lime-50 dark:bg-lime-900' },
green: { base: 'bg-green-50 dark:bg-green-900' },
emerald: { base: 'bg-emerald-50 dark:bg-emerald-900' },
teal: { base: 'bg-teal-50 dark:bg-teal-900' },
cyan: { base: 'bg-cyan-50 dark:bg-cyan-900' },
sky: { base: 'bg-sky-50 dark:bg-sky-900' },
blue: { base: 'bg-blue-50 dark:bg-blue-900' },
indigo: { base: 'bg-indigo-50 dark:bg-indigo-900' },
violet: { base: 'bg-violet-50 dark:bg-violet-900' },
purple: { base: 'bg-purple-50 dark:bg-purple-900' },
fuchsia: { base: 'bg-fuchsia-50 dark:bg-fuchsia-900' },
pink: { base: 'bg-pink-50 dark:bg-pink-900' },
rose: { base: 'bg-rose-50 dark:bg-rose-900' }
}
},
defaultVariants: {
position: 'sticky',
bannerType: 'default'
}
});
export { banner };