import React, { forwardRef } from 'react' /** * Nova Toggle – on/off switch * * @prop {boolean} checked - controlled value * @prop {function} onChange - change handler (receives event OR is called with no args if `simpleChange` true) * @prop {string} label - text label beside the toggle * @prop {string} hint - small helper text * @prop {string} size - 'sm' | 'md' | 'lg' * @prop {string} variant - 'accent' | 'emerald' | 'sky' */ const sizeMap = { sm: { track: 'w-8 h-4', thumb: 'w-3 h-3', translate: 'translate-x-4', offset: 'translate-x-0.5' }, md: { track: 'w-10 h-5', thumb: 'w-3.5 h-3.5', translate: 'translate-x-5', offset: 'translate-x-[3px]' }, lg: { track: 'w-12 h-6', thumb: 'w-4.5 h-4.5', translate: 'translate-x-6', offset: 'translate-x-[3px]' }, } const variantMap = { accent: 'bg-accent', emerald: 'bg-emerald-500', sky: 'bg-sky-500', } const Toggle = forwardRef(function Toggle( { checked = false, onChange, label, hint, size = 'md', variant = 'accent', id, disabled = false, className = '' }, ref, ) { const s = sizeMap[size] ?? sizeMap.md const vClass = variantMap[variant] ?? variantMap.accent const inputId = id ?? (label ? `toggle-${label.toLowerCase().replace(/\s+/g, '-')}` : undefined) return ( ) }) export default Toggle