{"version":3,"sources":["../src/badge/index.tsx"],"names":["spacing","useTheme","radius","jsxs"],"mappings":";;;;;;;AAgBA,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;AAaA,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,IAAA,GAAO,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,KAAA,EAAO,QAAA,EAAS,EAAe;AAC9G,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,GAAsB;AAAA,IAC1B,OAAA,EAAS,aAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,CAAA;AAAA,IACL,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EAAY,GAAA;AAAA,IACZ,SAAS,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,KAAK,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,cAAcC,WAAA,CAAO,IAAA;AAAA,IACrB,UAAA,EAAY,QAAA;AAAA,IACZ,KAAA,EAAO,IAAA,KAAS,SAAA,GAAY,MAAA,CAAO,IAAA,GAAO,EAAA;AAAA,IAC1C,UAAA,EAAY,IAAA,GAAO,SAAA,CAAU,EAAA,EAAI,IAAI,CAAA,GAAI,aAAA;AAAA,IACzC,QAAQ,IAAA,GACJ,uBAAA,GACA,CAAA,IAAA,EAAO,IAAA,KAAS,UAAU,QAAA,GAAW,OAAO,CAAA,CAAA,EAAI,IAAA,KAAS,YAAY,MAAA,CAAO,MAAA,GAAS,SAAA,CAAU,EAAA,EAAI,GAAG,CAAC,CAAA,CAAA;AAAA,IAC3G,GAAG;AAAA,GACL;AAEA,EAAA,uBACEC,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAsB,KAAA,EAAO,IAAA,EAChC,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,IACA;AAAA,GAAA,EACH,CAAA;AAEJ","file":"badge.cjs","sourcesContent":["/**\n * Badge (web). A small pill for status, tags, and counts. Tone-driven:\n * accent for emphasis, semantic tones for status, ghost for a dashed\n * outline. `soft` fills with a tinted background instead of a border.\n *\n *   <Badge tone=\"accent\">Promoted</Badge>\n *   <Badge tone=\"success\" soft>ATS-safe</Badge>\n *   <Badge tone=\"ghost\">OTIF</Badge>\n */\nimport type { CSSProperties, ReactNode } from \"react\";\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  /** Filled tinted background instead of a bordered outline. */\n  soft?: boolean;\n  leading?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\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, leading, className, 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 base: CSSProperties = {\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    gap: 5,\n    fontSize: dims.fontSize,\n    fontWeight: 600,\n    lineHeight: 1.2,\n    padding: `${dims.padY}px ${dims.padX}px`,\n    borderRadius: radius.pill,\n    whiteSpace: \"nowrap\",\n    color: tone === \"neutral\" ? colors.text : fg,\n    background: soft ? withAlpha(fg, 0.12) : \"transparent\",\n    border: soft\n      ? \"1px solid transparent\"\n      : `1px ${tone === \"ghost\" ? \"dashed\" : \"solid\"} ${tone === \"neutral\" ? colors.stroke : withAlpha(fg, 0.4)}`,\n    ...style,\n  };\n\n  return (\n    <span className={className} style={base}>\n      {leading}\n      {children}\n    </span>\n  );\n}\n"]}