{"version":3,"sources":["../src/card/index.tsx"],"names":["spacing","forwardRef","Card","useTheme","radiusScale","jsx"],"mappings":";;;;;;;;AAkBA,IAAM,MAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,CAAA;AAAA,EACN,EAAA,EAAIA,aAAQ,CAAC,CAAA;AAAA,EACb,EAAA,EAAIA,aAAQ,CAAC,CAAA;AAAA,EACb,EAAA,EAAIA,aAAQ,CAAC;AACf,CAAA;AAeO,IAAM,OAAOC,gBAAA,CAAsC,SAASC,MACjE,EAAE,OAAA,GAAU,WAAW,OAAA,GAAU,IAAA,EAAM,SAAS,IAAA,EAAM,WAAA,EAAa,SAAS,SAAA,EAAW,KAAA,EAAO,UAAU,GAAG,IAAA,IAC3G,GAAA,EACA;AACA,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,eAAA,EAAS;AAE5B,EAAA,MAAM,EAAA,GACJ,YAAY,QAAA,GAAW,MAAA,CAAO,cAAc,OAAA,KAAY,QAAA,GAAW,MAAA,CAAO,aAAA,GAAgB,MAAA,CAAO,WAAA;AAEnG,EAAA,MAAM,IAAA,GAAsB;AAAA,IAC1B,UAAA,EAAY,EAAA;AAAA,IACZ,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,IAClC,YAAA,EAAcC,YAAY,MAAM,CAAA;AAAA,IAChC,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA,IACvB,MAAA,EAAQ,WAAA,IAAe,OAAA,GAAU,SAAA,GAAY,MAAA;AAAA,IAC7C,UAAA,EAAY,2FAAA;AAAA,IACZ,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAwC;AACvD,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,OAAA,EAAS;AAC9B,IAAA,CAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,GAAc,MAAA,CAAO,aAAA;AAAA,EAC7C,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAwC;AACxD,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,OAAA,EAAS;AAC9B,IAAA,CAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,GAAc,MAAA,CAAO,MAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,OAAA;AAAA,MACA,YAAA,EAAc,OAAA;AAAA,MACd,YAAA,EAAc,QAAA;AAAA,MACd,IAAA,EAAM,UAAU,QAAA,GAAW,MAAA;AAAA,MAC3B,QAAA,EAAU,UAAU,CAAA,GAAI,MAAA;AAAA,MACxB,YAAA,EAAY,KAAK,YAAY,CAAA;AAAA,MAE5B;AAAA;AAAA,GACH;AAEJ,CAAC","file":"card.cjs","sourcesContent":["/**\n * Card (web). A bordered surface — the default container for grouped\n * content. Hairline border is the resting elevation (no shadow by\n * default); `interactive` warms the border on hover so clickable cards\n * read as clickable.\n *\n *   <Card>…</Card>\n *   <Card variant=\"raised\" padding=\"lg\" />\n *   <Card interactive onClick={…} />\n */\nimport { forwardRef, type CSSProperties, type ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius as radiusScale, spacing } from \"@plyxui/core\";\n\nexport type CardVariant = \"outline\" | \"raised\" | \"sunken\";\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\nexport type CardRadius = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst padMap: Record<CardPadding, number> = {\n  none: 0,\n  sm: spacing[3],\n  md: spacing[4],\n  lg: spacing[6],\n};\n\nexport interface CardProps {\n  variant?: CardVariant;\n  padding?: CardPadding;\n  radius?: CardRadius;\n  /** Warm the border on hover; renders as a button when onClick is set. */\n  interactive?: boolean;\n  onClick?: () => void;\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n  \"aria-label\"?: string;\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n  { variant = \"outline\", padding = \"md\", radius = \"lg\", interactive, onClick, className, style, children, ...aria },\n  ref,\n) {\n  const { colors } = useTheme();\n\n  const bg =\n    variant === \"raised\" ? colors.surfaceFill : variant === \"sunken\" ? colors.containerFill : colors.surfaceFill;\n\n  const base: CSSProperties = {\n    background: bg,\n    border: `1px solid ${colors.stroke}`,\n    borderRadius: radiusScale[radius],\n    padding: padMap[padding],\n    cursor: interactive || onClick ? \"pointer\" : undefined,\n    transition: \"border-color 0.2s cubic-bezier(0.23,1,0.32,1), transform 0.2s cubic-bezier(0.23,1,0.32,1)\",\n    ...style,\n  };\n\n  const hoverOn = (e: React.MouseEvent<HTMLDivElement>) => {\n    if (!interactive && !onClick) return;\n    e.currentTarget.style.borderColor = colors.primaryOrange;\n  };\n  const hoverOff = (e: React.MouseEvent<HTMLDivElement>) => {\n    if (!interactive && !onClick) return;\n    e.currentTarget.style.borderColor = colors.stroke;\n  };\n\n  return (\n    <div\n      ref={ref}\n      className={className}\n      style={base}\n      onClick={onClick}\n      onMouseEnter={hoverOn}\n      onMouseLeave={hoverOff}\n      role={onClick ? \"button\" : undefined}\n      tabIndex={onClick ? 0 : undefined}\n      aria-label={aria[\"aria-label\"]}\n    >\n      {children}\n    </div>\n  );\n});\n"]}