{"version":3,"sources":["../src/switch/index.native.tsx"],"names":["useTheme","useState","jsx","Pressable","View","jsxs","Text"],"mappings":";;;;;;;;AAUA,IAAM,OAAA,GAAoF;AAAA,EACxF,EAAA,EAAI,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAI,KAAA,EAAO,EAAA,EAAI,GAAA,EAAK,CAAA,EAAE;AAAA,EACtC,EAAA,EAAI,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAI,KAAA,EAAO,EAAA,EAAI,GAAA,EAAK,CAAA;AACtC,CAAA;AAWO,SAAS,MAAA,CAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,UAAU,QAAA,EAAU,IAAA,GAAO,IAAA,EAAM,KAAA,EAAM,EAAgB;AACvG,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIA,eAAA,EAAS;AAC5B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,cAAA,CAAkB,kBAAkB,KAAK,CAAA;AACzE,EAAA,MAAM,KAAK,OAAA,IAAW,QAAA;AACtB,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAI,CAAA;AAEzB,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,IAAI,OAAA,KAAY,MAAA,EAAW,WAAA,CAAY,CAAC,EAAE,CAAA;AAC1C,IAAA,QAAA,GAAW,CAAC,EAAE,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,OAAO,IAAA,CAAK,CAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,CAAA;AAAA,IACb,cAAc,IAAA,CAAK,CAAA;AAAA,IACnB,eAAA,EAAiB,EAAA,GAAK,MAAA,CAAO,aAAA,GAAgB,MAAA,CAAO,MAAA;AAAA,IACpD,OAAA,EAAS,WAAW,IAAA,GAAO,CAAA;AAAA,IAC3B,cAAA,EAAgB,QAAA;AAAA,IAChB,SAAS,IAAA,CAAK;AAAA,GAChB;AACA,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,KAAA;AAAA,IACb,YAAA,EAAc,KAAK,KAAA,GAAQ,CAAA;AAAA,IAC3B,eAAA,EAAiB,MAAA;AAAA,IACjB,SAAA,EAAW,CAAC,EAAE,UAAA,EAAY,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,GAAA,GAAM,CAAA,GAAI,GAAG;AAAA,GACzE;AAEA,EAAA,MAAM,OAAA,mBACJC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACC,iBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,EAAE,OAAA,EAAS,EAAA,EAAI,QAAA,EAAS;AAAA,MAC5C,OAAA,EAAS,MAAA;AAAA,MACT,KAAA,EAAO,KAAA;AAAA,MAEP,QAAA,kBAAAD,cAAA,CAACE,gBAAA,EAAA,EAAK,KAAA,EAAO,KAAA,EAAO;AAAA;AAAA,GACtB;AAGF,EAAA,IAAI,CAAC,OAAO,OAAO,OAAA;AACnB,EAAA,uBACEC,eAAA,CAACF,qBAAA,EAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,EAAE,aAAA,EAAe,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,EAAA,EAAG,EACtF,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,oBACDD,cAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,EAAK,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAC5D,CAAA;AAEJ","file":"switch.native.cjs","sourcesContent":["/**\n * Switch (native). Toggle matching the web shape; thumb slides via a\n * state-driven translateX (no Reanimated dependency).\n */\nimport { useState, type ReactNode } from \"react\";\nimport { Pressable, Text, View, type ViewStyle } from \"react-native\";\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}\n\nexport function Switch({ checked, defaultChecked, onChange, disabled, size = \"md\", label }: SwitchProps) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<boolean>(defaultChecked ?? false);\n  const on = checked ?? internal;\n  const dims = sizeMap[size];\n\n  const toggle = () => {\n    if (disabled) return;\n    if (checked === undefined) setInternal(!on);\n    onChange?.(!on);\n  };\n\n  const track: ViewStyle = {\n    width: dims.w,\n    height: dims.h,\n    borderRadius: dims.h,\n    backgroundColor: on ? colors.primaryOrange : colors.stroke,\n    opacity: disabled ? 0.55 : 1,\n    justifyContent: \"center\",\n    padding: dims.pad,\n  };\n  const thumb: ViewStyle = {\n    width: dims.thumb,\n    height: dims.thumb,\n    borderRadius: dims.thumb / 2,\n    backgroundColor: \"#fff\",\n    transform: [{ translateX: on ? dims.w - dims.thumb - dims.pad * 2 : 0 }],\n  };\n\n  const control = (\n    <Pressable\n      accessibilityRole=\"switch\"\n      accessibilityState={{ checked: on, disabled }}\n      onPress={toggle}\n      style={track}\n    >\n      <View style={thumb} />\n    </Pressable>\n  );\n\n  if (!label) return control;\n  return (\n    <Pressable onPress={toggle} style={{ flexDirection: \"row\", alignItems: \"center\", gap: 10 }}>\n      {control}\n      <Text style={{ fontSize: 14, color: colors.text }}>{label}</Text>\n    </Pressable>\n  );\n}\n"]}