mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
41 lines
1.4 KiB
TypeScript
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>
|
|
);
|
|
},
|
|
);
|