Switch.jsx 991 B

1234567891011121314151617181920212223242526
  1. import { h } from 'preact';
  2. import { useCallback, useState } from 'preact/hooks';
  3. export default function Switch({ checked, label, id, onChange }) {
  4. const handleChange = useCallback(() => {
  5. onChange(id, !checked);
  6. }, [id, onChange, checked]);
  7. return (
  8. <label for={id} className="flex items-center cursor-pointer">
  9. <div className="relative">
  10. <input id={id} type="checkbox" className="hidden" onChange={handleChange} checked={checked} />
  11. <div
  12. className={`transition-colors toggle__line w-12 h-6 ${
  13. !checked ? 'bg-gray-400' : 'bg-blue-400'
  14. } rounded-full shadow-inner`}
  15. />
  16. <div
  17. className="transition-transform absolute w-6 h-6 bg-white rounded-full shadow-md inset-y-0 left-0"
  18. style={checked ? 'transform: translateX(100%);' : 'transform: translateX(0%);'}
  19. />
  20. </div>
  21. <div className="ml-3 text-gray-700 font-medium dark:text-gray-200">{label}</div>
  22. </label>
  23. );
  24. }