{"version":3,"sources":["../src/badge/index.native.tsx"],"names":["spacing","useTheme","radius","jsx","View","Text"],"mappings":";;;;;;;;AAYA,IAAM,OAAA,GAA+E;AAAA,EACnF,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAI,MAAM,CAAA,EAAG,IAAA,EAAMA,YAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,EAC9C,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAI,MAAM,CAAA,EAAG,IAAA,EAAMA,YAAA,CAAQ,CAAC,CAAA;AAC9C,CAAA;AAUA,SAAS,SAAA,CAAU,KAAa,CAAA,EAAmB;AACjD,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACnC,EAAA,OAAO,CAAA,KAAA,EAAS,CAAA,IAAK,EAAA,GAAM,GAAG,CAAA,EAAA,EAAM,CAAA,IAAK,CAAA,GAAK,GAAG,CAAA,EAAA,EAAK,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAA;AACrE;AAEO,SAAS,KAAA,CAAM,EAAE,IAAA,GAAO,SAAA,EAAW,OAAO,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,QAAA,EAAS,EAAe;AAC1F,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,eAAA,EAAS;AAC5B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAI,CAAA;AAEzB,EAAA,MAAM,SAAA,GAAuC;AAAA,IAC3C,SAAS,MAAA,CAAO,SAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,aAAA;AAAA,IACf,SAAS,MAAA,CAAO,aAAA;AAAA,IAChB,SAAS,MAAA,CAAO,aAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,WAAA;AAAA,IACf,OAAO,MAAA,CAAO;AAAA,GAChB;AACA,EAAA,MAAM,EAAA,GAAK,UAAU,IAAI,CAAA;AAEzB,EAAA,MAAM,IAAA,GAAkB;AAAA,IACtB,SAAA,EAAW,YAAA;AAAA,IACX,iBAAiB,IAAA,CAAK,IAAA;AAAA,IACtB,mBAAmB,IAAA,CAAK,IAAA;AAAA,IACxB,cAAcC,WAAA,CAAO,IAAA;AAAA,IACrB,eAAA,EAAiB,IAAA,GAAO,SAAA,CAAU,EAAA,EAAI,IAAI,CAAA,GAAI,aAAA;AAAA,IAC9C,WAAA,EAAa,OAAO,CAAA,GAAI,CAAA;AAAA,IACxB,aAAa,IAAA,KAAS,SAAA,GAAY,OAAO,MAAA,GAAS,SAAA,CAAU,IAAI,GAAG,CAAA;AAAA,IACnE,GAAG;AAAA,GACL;AAEA,EAAA,uBACEC,cAAA,CAACC,oBAAK,KAAA,EAAO,IAAA,EACX,yCAACC,gBAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,UAAA,EAAY,KAAA,EAAO,OAAO,IAAA,KAAS,SAAA,GAAY,OAAO,IAAA,GAAO,EAAA,EAAG,EACrG,QAAA,EACH,CAAA,EACF,CAAA;AAEJ","file":"badge.native.cjs","sourcesContent":["/**\n * Badge (native). Pill matching the web tones. RN has no dashed inline\n * border in older targets, so ghost falls back to a solid hairline.\n */\nimport type { ReactNode } from \"react\";\nimport { Text, View, type ViewStyle } from \"react-native\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius, spacing } from \"@plyxui/core\";\n\nexport type BadgeTone = \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"ghost\";\nexport type BadgeSize = \"sm\" | \"md\";\n\nconst sizeMap: Record<BadgeSize, { fontSize: number; padY: number; padX: number }> = {\n  sm: { fontSize: 11, padY: 2, padX: spacing[2] },\n  md: { fontSize: 12, padY: 4, padX: spacing[3] },\n};\n\nexport interface BadgeProps {\n  tone?: BadgeTone;\n  size?: BadgeSize;\n  soft?: boolean;\n  style?: ViewStyle;\n  children?: ReactNode;\n}\n\nfunction withAlpha(hex: string, a: number): string {\n  const n = parseInt(hex.slice(1), 16);\n  return `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${a})`;\n}\n\nexport function Badge({ tone = \"neutral\", size = \"md\", soft, style, children }: BadgeProps) {\n  const { colors } = useTheme();\n  const dims = sizeMap[size];\n\n  const toneColor: Record<BadgeTone, string> = {\n    neutral: colors.textMuted,\n    accent: colors.primaryOrange,\n    success: colors.statusSuccess,\n    warning: colors.statusWarning,\n    danger: colors.statusError,\n    ghost: colors.textMuted,\n  };\n  const fg = toneColor[tone];\n\n  const wrap: ViewStyle = {\n    alignSelf: \"flex-start\",\n    paddingVertical: dims.padY,\n    paddingHorizontal: dims.padX,\n    borderRadius: radius.pill,\n    backgroundColor: soft ? withAlpha(fg, 0.12) : \"transparent\",\n    borderWidth: soft ? 0 : 1,\n    borderColor: tone === \"neutral\" ? colors.stroke : withAlpha(fg, 0.4),\n    ...style,\n  };\n\n  return (\n    <View style={wrap}>\n      <Text style={{ fontSize: dims.fontSize, fontWeight: \"600\", color: tone === \"neutral\" ? colors.text : fg }}>\n        {children}\n      </Text>\n    </View>\n  );\n}\n"]}