/*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
"use client";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
const require_styles_styler = require("../../../styles/styler.cjs");
const require_components_Box = require("../../Box.cjs");
const require_components_FormLabel = require("../../FormLabel.cjs");
const require_components_client_Switch_switchStyles = require("./switchStyles.cjs");
let react = require("react");
react = require_runtime.__toESM(react);
let react_jsx_runtime = require("react/jsx-runtime");
//#region src/components/client/Switch/SwitchBase.tsx
const SwitchBase = (0, react.forwardRef)(function SwitchBase({ id, isOn: isOnProp, defaultIsOn, onChange, label, labelPosition = "start", size = "md", onIcon, offIcon, disabled, required, onFocus, onBlur, className, style, slotProps, cssAnimationDuration, enableHoverTracking = false, renderHandle, ...switchProps }, parentRef) {
	const generatedId = (0, react.useId)();
	const uid = id ?? `uds-input-${generatedId}`;
	const rootSlotProps = slotProps?.root ?? {};
	const switchSlotProps = slotProps?.switch ?? {};
	const handleSlotProps = slotProps?.handle ?? {};
	const labelSlotProps = slotProps?.label ?? {};
	const innerRef = (0, react.useRef)(null);
	const isControlled = isOnProp !== void 0;
	const [uncontrolledIsOn, setUncontrolledIsOn] = (0, react.useState)(defaultIsOn ?? false);
	const [isHovered, setIsHovered] = (0, react.useState)(false);
	const showHoverEffect = (0, react.useMemo)(() => {
		return enableHoverTracking && !disabled && isHovered;
	}, [
		disabled,
		enableHoverTracking,
		isHovered
	]);
	const { isOnX, isOnTranslateClass } = require_components_client_Switch_switchStyles.SIZE_MAP[size];
	const isOn = isControlled ? isOnProp ?? false : uncontrolledIsOn;
	const handleChange = (0, react.useCallback)((e) => {
		onChange?.(e);
		if (!isControlled) setUncontrolledIsOn(e.target.checked);
	}, [isControlled, onChange]);
	const handleFocus = (0, react.useCallback)((e) => {
		onFocus?.(e);
	}, [onFocus]);
	const handleBlur = (0, react.useCallback)((e) => {
		onBlur?.(e);
	}, [onBlur]);
	const handleHoverStart = (0, react.useCallback)(() => {
		if (enableHoverTracking) setIsHovered(true);
	}, [enableHoverTracking]);
	const handleHoverEnd = (0, react.useCallback)(() => {
		if (enableHoverTracking) setIsHovered(false);
	}, [enableHoverTracking]);
	const classNames = {
		root: require_styles_styler.getStyles({
			switchSizeRoot: size,
			switchVariantRoot: "default",
			switchVariantActiveRoot: isOn ? "on" : "off",
			display: "flex",
			flexDirection: labelPosition === "start" ? "row" : "row-reverse",
			alignItems: "center",
			className: require_styles_styler.cx("group", {
				"cursor-pointer": !disabled,
				"cursor-default": disabled,
				"opacity-50": disabled
			}, className)
		}),
		switch: require_styles_styler.getStyles({
			switchVariantSwitch: "default",
			switchSizeSwitch: size,
			switchVariantActiveSwitch: isOn ? "on" : "off",
			borderRadius: "full",
			position: "relative",
			alignItems: "center",
			className: require_styles_styler.cx("uds-ring", "uds-ring-within", cssAnimationDuration, "transition-[background-color,box-shadow]")
		}),
		htmlCheckbox: require_styles_styler.cx("cursor-[inherit]", "absolute", "opacity-0", "top-1/2", "left-1/2", "w-[calc(100%+2px)]", "h-[calc(100%+2px)]", "transform", "translate-x-[-50%]", "translate-y-[-50%]"),
		label: require_styles_styler.cx(labelPosition === "start" ? "text-start" : "text-end")
	};
	return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(label ? "label" : "div", {
		className: classNames.root,
		"data-testid": "container",
		style,
		tabIndex: -1,
		onPointerEnter: handleHoverStart,
		onPointerLeave: handleHoverEnd,
		...rootSlotProps,
		children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_Box.Box, {
			className: classNames.switch,
			...switchSlotProps,
			children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
				type: "checkbox",
				tabIndex: 0,
				...switchProps,
				ref: (ref) => {
					innerRef.current = ref;
					if (typeof parentRef === "function") parentRef(ref);
					else if (parentRef !== null) parentRef.current = ref;
				},
				onFocus: handleFocus,
				onBlur: handleBlur,
				id: uid,
				disabled,
				required,
				checked: isControlled ? isOn : void 0,
				defaultChecked: isControlled ? void 0 : defaultIsOn,
				onChange: handleChange,
				className: classNames.htmlCheckbox
			}), renderHandle({
				size,
				isOn,
				isOnX,
				isOnTranslateClass,
				showHoverEffect,
				disabled,
				onIcon,
				offIcon,
				cssAnimationDuration,
				handleSlotProps
			})]
		}), label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_FormLabel.FormLabel, {
			as: "div",
			variant: "inherit",
			color: "inherit",
			required,
			label,
			className: classNames.label,
			...labelSlotProps
		})]
	});
});
SwitchBase.displayName = "SwitchBase";
//#endregion
exports.SwitchBase = SwitchBase;
