UNPKG

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.

180 lines (179 loc) 8.56 kB
import { tv } from 'tailwind-variants'; export const floatingLabelInput = tv({ slots: { base: 'relative', input: 'block w-full text-sm text-gray-900 bg-transparent appearance-none dark:text-white focus:outline-none focus:ring-0 peer', label: 'absolute text-sm duration-300 transform scale-75 z-10 origin-left rtl:origin-right peer-placeholder-shown:scale-100 peer-focus:scale-75' }, variants: { inputStyle: { filled: { base: 'relative', input: 'rounded-t-lg border-0 border-b-2 bg-gray-50 dark:bg-gray-700', label: '-translate-y-4 start-2.5 peer-placeholder-shown:translate-y-0 peer-focus:-translate-y-4' }, outlined: { base: 'relative', input: 'rounded-lg border', label: '-translate-y-4 bg-white dark:bg-gray-900 px-2 peer-focus:px-2 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:top-1/2 peer-focus:top-2 peer-focus:-translate-y-4 start-1' }, standard: { base: 'relative z-0', input: 'border-0 border-b-2', label: '-translate-y-6 -z-10 peer-focus:start-0 peer-placeholder-shown:translate-y-0 peer-focus:-translate-y-6' } }, size: { small: {}, default: {} }, color: { default: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-primary-500 focus:border-primary-600', label: 'text-gray-500 dark:text-gray-400 peer-focus:text-primary-600 peer-focus:dark:text-primary-500' }, primary: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-primary-500 focus:border-primary-600', label: 'text-primary-500 dark:text-primary-400 peer-focus:text-primary-600 peer-focus:dark:text-primary-500' }, secondary: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-secondary-500 focus:border-secondary-600', label: 'text-secondary-500 dark:text-secondary-400 peer-focus:text-secondary-600 peer-focus:dark:text-secondary-500' }, gray: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-gray-500 focus:border-gray-600', label: 'text-gray-500 dark:text-gray-400 peer-focus:text-gray-600 peer-focus:dark:text-gray-500' }, red: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-red-500 focus:border-red-600', label: 'text-red-500 dark:text-red-400 peer-focus:text-red-600 peer-focus:dark:text-red-500' }, orange: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-orange-500 focus:border-orange-600', label: 'text-orange-500 dark:text-orange-400 peer-focus:text-orange-600 peer-focus:dark:text-orange-500' }, amber: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-amber-500 focus:border-amber-600', label: 'text-amber-500 dark:text-amber-400 peer-focus:text-amber-600 peer-focus:dark:text-amber-500' }, yellow: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-yellow-500 focus:border-yellow-600', label: 'text-yellow-500 dark:text-yellow-400 peer-focus:text-yellow-600 peer-focus:dark:text-yellow-500' }, lime: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-lime-500 focus:border-lime-600', label: 'text-lime-500 dark:text-lime-400 peer-focus:text-lime-600 peer-focus:dark:text-lime-500' }, green: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-green-500 focus:border-green-600', label: 'text-green-500 dark:text-green-400 peer-focus:text-green-600 peer-focus:dark:text-green-500' }, emerald: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-emerald-500 focus:border-emerald-600', label: 'text-emerald-500 dark:text-emerald-400 peer-focus:text-emerald-600 peer-focus:dark:text-emerald-500' }, teal: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-teal-500 focus:border-teal-600', label: 'text-teal-500 dark:text-teal-400 peer-focus:text-teal-600 peer-focus:dark:text-teal-500' }, cyan: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-cyan-500 focus:border-cyan-600', label: 'text-cyan-500 dark:text-cyan-400 peer-focus:text-cyan-600 peer-focus:dark:text-cyan-500' }, sky: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-sky-500 focus:border-sky-600', label: 'text-sky-500 dark:text-sky-400 peer-focus:text-sky-600 peer-focus:dark:text-sky-500' }, blue: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-blue-500 focus:border-blue-600', label: 'text-blue-500 dark:text-blue-400 peer-focus:text-blue-600 peer-focus:dark:text-blue-500' }, indigo: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-indigo-500 focus:border-indigo-600', label: 'text-indigo-500 dark:text-indigo-400 peer-focus:text-indigo-600 peer-focus:dark:text-indigo-500' }, violet: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-violet-500 focus:border-violet-600', label: 'text-violet-600 dark:text-violet-500 peer-focus:text-violet-600 peer-focus:dark:text-violet-500' }, purple: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-purple-500 focus:border-purple-600', label: 'text-purple-600 dark:text-purple-500 peer-focus:text-purple-600 peer-focus:dark:text-purple-500' }, fuchsia: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-fuchsia-500 focus:border-fuchsia-600', label: 'text-fuchsia-600 dark:text-fuchsia-500 peer-focus:text-fuchsia-600 peer-focus:dark:text-fuchsia-500' }, pink: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-pink-500 focus:border-pink-600', label: 'text-pink-600 dark:text-pink-500 peer-focus:text-pink-600 peer-focus:dark:text-pink-500' }, rose: { input: 'border-gray-300 dark:border-gray-600 dark:focus:border-rose-500 focus:border-rose-600', label: 'text-rose-600 dark:text-rose-500 peer-focus:text-rose-600 peer-focus:dark:text-rose-500' } } }, compoundVariants: [ { inputStyle: 'filled', size: 'small', class: { input: 'px-2.5 pb-1.5 pt-4', label: 'top-3' } }, { inputStyle: 'filled', size: 'default', class: { input: 'px-2.5 pb-2.5 pt-5', label: 'top-4' } }, { inputStyle: 'outlined', size: 'small', class: { input: 'px-2.5 pb-1.5 pt-3', label: 'top-1' } }, { inputStyle: 'outlined', size: 'default', class: { input: 'px-2.5 pb-2.5 pt-4', label: 'top-2' } }, { inputStyle: 'standard', size: 'small', class: { input: 'py-2 px-0', label: 'top-3' } }, { inputStyle: 'standard', size: 'default', class: { input: 'py-2.5 px-0', label: 'top-3' } }, { inputStyle: 'filled', color: 'primary', class: { input: 'dark:focus:border-primary-500 focus:border-primary-600' } } ], defaultVariants: { inputStyle: 'standard', size: 'default', color: 'primary' } });