Files
2025-02-17 20:53:00 +01:00

41 lines
1.4 KiB
TypeScript

import { Switch as ChakraSwitch } from '@chakra-ui/react';
import * as React from 'react';
export interface SwitchProps extends ChakraSwitch.RootProps {
inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
labelProps?: ChakraSwitch.LabelProps;
rootRef?: React.Ref<HTMLLabelElement>;
trackLabel?: { on: React.ReactNode; off: React.ReactNode };
thumbLabel?: { on: React.ReactNode; off: React.ReactNode };
}
export const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(
function Switch(props, ref) {
const { inputProps, children, rootRef, trackLabel, thumbLabel, labelProps, ...rest } =
props;
return (
<ChakraSwitch.Root ref={ rootRef } { ...rest }>
<ChakraSwitch.HiddenInput ref={ ref } { ...inputProps }/>
<ChakraSwitch.Control>
<ChakraSwitch.Thumb>
{ thumbLabel && (
<ChakraSwitch.ThumbIndicator fallback={ thumbLabel?.off }>
{ thumbLabel?.on }
</ChakraSwitch.ThumbIndicator>
) }
</ChakraSwitch.Thumb>
{ trackLabel && (
<ChakraSwitch.Indicator fallback={ trackLabel.off }>
{ trackLabel.on }
</ChakraSwitch.Indicator>
) }
</ChakraSwitch.Control >
{ children != null && (
<ChakraSwitch.Label { ...labelProps }>{ children }</ChakraSwitch.Label>
) }
</ChakraSwitch.Root>
);
},
);