import React from "react";
import Box from "../../atoms/box/box";
import { MoleculeComponentProps, StateProps } from "../../../theme/src/types";
import { pearl } from "../../../pearl";
import Pressable, { PressableProps } from "../../atoms/pressable/pressable";
import { useCheckedState } from "../../../hooks";
import { boxStyleFunctions } from "../../../theme/src/style-functions";
import { SwitchAtoms } from "./switch.config";
export type BaseSwitchProps = PressableProps &
StateProps<"_checked" | "_disabled"> & {
/**
* Whether the switch is in a checked state.
*
* @default false
*/
isChecked?: boolean;
/**
* Whether the switch is disabled.
*
* @default false
*/
isDisabled?: boolean;
};
const BaseSwitch = React.memo(
React.forwardRef(
(
{
children,
atoms,
...rest
}: MoleculeComponentProps<"Switch", BaseSwitchProps, SwitchAtoms>,
ref: any
) => {
let { isChecked, isDisabled, ...otherTrackProps } = atoms.track;
const { propsWithCheckedStyles: propsWithCheckedStylesForTrack } =
useCheckedState(
otherTrackProps,
boxStyleFunctions,
"molecule",
true,
isChecked
);
otherTrackProps = propsWithCheckedStylesForTrack;
const { propsWithCheckedStyles: propsWithCheckedStylesForKnob } =
useCheckedState(
atoms.knob,
boxStyleFunctions,
"molecule",
true,
isChecked
);
atoms.knob = propsWithCheckedStylesForKnob;
return (
);
}
)
);
/** The Progress component is a visual indicator of completion percentage. */
const Switch = pearl(
BaseSwitch,
{
componentName: "Switch",
type: "molecule",
animatable: true,
},
undefined,
{
partForOverridenAnimationProps: "track",
partForOverridenNativeProps: "track",
partForOverridenStyleProps: "track",
}
);
export type SwitchProps = React.ComponentProps;
Switch.displayName = "Switch";
export default Switch;