{"version":3,"sources":["../src/switch/index.tsx"],"names":["useTheme","useState","jsx","jsxs"],"mappings":"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","file":"switch.cjs","sourcesContent":["/**\n * Switch (web). A binary toggle — the on/off sibling of Checkbox, for\n * settings and instant-apply options. Track fills with the accent when\n * on; the thumb slides with a short ease-out.\n *\n *   <Switch checked={on} onChange={setOn} />\n *   <Switch defaultChecked label=\"Open to relocation\" />\n */\nimport { useState, type CSSProperties, type ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\n\nexport type SwitchSize = \"sm\" | \"md\";\n\nconst sizeMap: Record<SwitchSize, { w: number; h: number; thumb: number; pad: number }> = {\n  sm: { w: 34, h: 20, thumb: 14, pad: 3 },\n  md: { w: 44, h: 26, thumb: 20, pad: 3 },\n};\n\nexport interface SwitchProps {\n  checked?: boolean;\n  defaultChecked?: boolean;\n  onChange?: (checked: boolean) => void;\n  disabled?: boolean;\n  size?: SwitchSize;\n  label?: ReactNode;\n  id?: string;\n  \"aria-label\"?: string;\n}\n\nexport function Switch({ checked, defaultChecked, onChange, disabled, size = \"md\", label, id, ...aria }: SwitchProps) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<boolean>(defaultChecked ?? false);\n  const isControlled = checked !== undefined;\n  const on = isControlled ? checked : internal;\n  const dims = sizeMap[size];\n\n  const toggle = () => {\n    if (disabled) return;\n    if (!isControlled) setInternal(!on);\n    onChange?.(!on);\n  };\n\n  const track: CSSProperties = {\n    width: dims.w,\n    height: dims.h,\n    borderRadius: dims.h,\n    background: on ? colors.primaryOrange : colors.stroke,\n    border: \"none\",\n    position: \"relative\",\n    cursor: disabled ? \"default\" : \"pointer\",\n    opacity: disabled ? 0.55 : 1,\n    transition: \"background 0.2s cubic-bezier(0.23,1,0.32,1)\",\n    flex: \"none\",\n    padding: 0,\n  };\n  const thumb: CSSProperties = {\n    position: \"absolute\",\n    top: dims.pad,\n    left: dims.pad,\n    width: dims.thumb,\n    height: dims.thumb,\n    borderRadius: \"50%\",\n    background: \"#fff\",\n    boxShadow: \"0 1px 2px rgba(0,0,0,.25)\",\n    transform: on ? `translateX(${dims.w - dims.thumb - dims.pad * 2}px)` : \"translateX(0)\",\n    transition: \"transform 0.2s cubic-bezier(0.23,1,0.32,1)\",\n  };\n\n  const control = (\n    <button\n      type=\"button\"\n      role=\"switch\"\n      aria-checked={on}\n      aria-label={aria[\"aria-label\"]}\n      id={id}\n      disabled={disabled}\n      onClick={toggle}\n      style={track}\n    >\n      <span style={thumb} />\n    </button>\n  );\n\n  if (!label) return control;\n  return (\n    <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 10, cursor: disabled ? \"default\" : \"pointer\" }}>\n      {control}\n      <span style={{ fontSize: 14, color: colors.text }}>{label}</span>\n    </label>\n  );\n}\n"]}