@@ -2,34 +2,48 @@ import React from 'react';
22import { motion } from 'framer-motion' ;
33import { Check , X } from '@phosphor-icons/react' ;
44
5- const CustomToggle = ( { id, checked, onChange, label, disabled, colorTheme = 'rose' } ) => {
5+ const CustomToggle = ( {
6+ id,
7+ checked,
8+ onChange,
9+ label,
10+ disabled,
11+ colorTheme = 'rose' ,
12+ } ) => {
613 const themes = {
714 rose : {
8- track : 'bg-rose-500/20 border-rose-500/50 shadow-[0_0_15px_rgba(244,63,94,0.2)]' ,
15+ track :
16+ 'bg-rose-500/20 border-rose-500/50 shadow-[0_0_15px_rgba(244,63,94,0.2)]' ,
917 knob : 'bg-rose-500 border-rose-400 shadow-[0_0_10px_rgba(244,63,94,0.4)]' ,
1018 } ,
1119 blue : {
12- track : 'bg-blue-500/20 border-blue-500/50 shadow-[0_0_15px_rgba(59,130,246,0.2)]' ,
20+ track :
21+ 'bg-blue-500/20 border-blue-500/50 shadow-[0_0_15px_rgba(59,130,246,0.2)]' ,
1322 knob : 'bg-blue-500 border-blue-400 shadow-[0_0_10px_rgba(59,130,246,0.4)]' ,
1423 } ,
1524 green : {
16- track : 'bg-emerald-500/20 border-emerald-500/50 shadow-[0_0_15px_rgba(16,185,129,0.2)]' ,
25+ track :
26+ 'bg-emerald-500/20 border-emerald-500/50 shadow-[0_0_15px_rgba(16,185,129,0.2)]' ,
1727 knob : 'bg-emerald-500 border-emerald-400 shadow-[0_0_10px_rgba(16,185,129,0.4)]' ,
1828 } ,
1929 amber : {
20- track : 'bg-amber-500/20 border-amber-500/50 shadow-[0_0_15px_rgba(245,158,11,0.2)]' ,
30+ track :
31+ 'bg-amber-500/20 border-amber-500/50 shadow-[0_0_15px_rgba(245,158,11,0.2)]' ,
2132 knob : 'bg-amber-500 border-amber-400 shadow-[0_0_10px_rgba(245,158,11,0.4)]' ,
2233 } ,
2334 purple : {
24- track : 'bg-purple-500/20 border-purple-500/50 shadow-[0_0_15px_rgba(168,85,247,0.2)]' ,
35+ track :
36+ 'bg-purple-500/20 border-purple-500/50 shadow-[0_0_15px_rgba(168,85,247,0.2)]' ,
2537 knob : 'bg-purple-500 border-purple-400 shadow-[0_0_10px_rgba(168,85,247,0.4)]' ,
2638 } ,
2739 cyan : {
28- track : 'bg-cyan-500/20 border-cyan-500/50 shadow-[0_0_15px_rgba(6,182,212,0.2)]' ,
40+ track :
41+ 'bg-cyan-500/20 border-cyan-500/50 shadow-[0_0_15px_rgba(6,182,212,0.2)]' ,
2942 knob : 'bg-cyan-500 border-cyan-400 shadow-[0_0_10px_rgba(6,182,212,0.4)]' ,
3043 } ,
3144 indigo : {
32- track : 'bg-indigo-500/20 border-indigo-500/50 shadow-[0_0_15px_rgba(99,102,241,0.2)]' ,
45+ track :
46+ 'bg-indigo-500/20 border-indigo-500/50 shadow-[0_0_15px_rgba(99,102,241,0.2)]' ,
3347 knob : 'bg-indigo-500 border-indigo-400 shadow-[0_0_10px_rgba(99,102,241,0.4)]' ,
3448 } ,
3549 } ;
@@ -64,14 +78,17 @@ const CustomToggle = ({ id, checked, onChange, label, disabled, colorTheme = 'ro
6478 className = { `
6579 w-14 h-8 rounded-full transition-all duration-300 ease-out
6680 border border-transparent shadow-inner relative overflow-hidden
67- ${ checked
68- ? activeTheme . track
69- : 'bg-gray-900/50 border-white/10 hover:border-white/20'
81+ ${
82+ checked
83+ ? activeTheme . track
84+ : 'bg-gray-900/50 border-white/10 hover:border-white/20'
7085 }
7186 ` }
7287 >
73- { /* Background sheen effect */ }
74- < div className = { `absolute inset-0 bg-gradient-to-r from-transparent via-white/5 to-transparent -skew-x-12 translate-x-[-100%] transition-transform duration-1000 ${ checked ? 'group-hover:translate-x-[100%]' : '' } ` } />
88+ { /* Background sheen effect */ }
89+ < div
90+ className = { `absolute inset-0 bg-gradient-to-r from-transparent via-white/5 to-transparent -skew-x-12 translate-x-[-100%] transition-transform duration-1000 ${ checked ? 'group-hover:translate-x-[100%]' : '' } ` }
91+ />
7592 </ div >
7693
7794 { /* Knob */ }
@@ -80,30 +97,27 @@ const CustomToggle = ({ id, checked, onChange, label, disabled, colorTheme = 'ro
8097 absolute top-1 left-1 w-6 h-6 rounded-full shadow-lg
8198 flex items-center justify-center
8299 backdrop-blur-sm border
83- ${ checked
84- ? activeTheme . knob
85- : 'bg-gray-700 border-gray-600'
86- }
100+ ${ checked ? activeTheme . knob : 'bg-gray-700 border-gray-600' }
87101 ` }
88102 animate = { {
89103 x : checked ? 24 : 0 ,
90- rotate : checked ? 360 : 0
104+ rotate : checked ? 360 : 0 ,
91105 } }
92106 transition = { {
93- type : " spring" ,
107+ type : ' spring' ,
94108 stiffness : 500 ,
95- damping : 30
109+ damping : 30 ,
96110 } }
97111 >
98112 { checked ? (
99- < Check size = { 12 } weight = "bold" className = "text-white" />
113+ < Check size = { 12 } weight = "bold" className = "text-white" />
100114 ) : (
101- < X size = { 12 } weight = "bold" className = "text-gray-400" />
115+ < X size = { 12 } weight = "bold" className = "text-gray-400" />
102116 ) }
103117 </ motion . div >
104118 </ div >
105119 </ div >
106120 ) ;
107121} ;
108122
109- export default CustomToggle ;
123+ export default CustomToggle ;
0 commit comments