{"version":3,"sources":["../src/button/index.tsx"],"names":["spacing","useTheme","radius","jsxs","forwardRef"],"mappings":"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","file":"button.cjs","sourcesContent":["/**\n * Button (web). Variants: primary, ghost, link, danger. Size + iconLeading/Trailing.\n *\n * Renders as a native <button>; if you need a navigation link, pass `as=\"a\"`.\n */\nimport { forwardRef, type ElementType, type CSSProperties, type ForwardedRef } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius, spacing } from \"@plyxui/core\";\nimport type { PolymorphicComponentPropsWithRef } from \"@plyxui/core\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"link\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nconst sizeMap: Record<ButtonSize, { h: number; padX: number; fontSize: number }> = {\n  sm: { h: 28, padX: spacing[3], fontSize: 13 },\n  md: { h: 36, padX: spacing[4], fontSize: 14 },\n  lg: { h: 44, padX: spacing[5], fontSize: 15 },\n};\n\ntype ButtonOwnProps = {\n  variant?: ButtonVariant;\n  size?: ButtonSize;\n  loading?: boolean;\n  disabled?: boolean;\n  iconLeading?: React.ReactNode;\n  iconTrailing?: React.ReactNode;\n  fullWidth?: boolean;\n  className?: string;\n  style?: CSSProperties;\n  children?: React.ReactNode;\n};\n\nexport type ButtonProps<C extends ElementType = \"button\"> = PolymorphicComponentPropsWithRef<\n  C,\n  ButtonOwnProps\n>;\n\nfunction variantStyle(\n  variant: ButtonVariant,\n  colors: { primaryOrange: string; surfaceFill: string; text: string; stroke: string; statusError: string },\n): CSSProperties {\n  switch (variant) {\n    case \"primary\":\n      return { background: colors.primaryOrange, color: \"#FFFFFF\", border: \"1px solid transparent\" };\n    case \"ghost\":\n      return { background: \"transparent\", color: colors.text, border: `1px solid ${colors.stroke}` };\n    case \"link\":\n      return { background: \"transparent\", color: colors.primaryOrange, border: \"1px solid transparent\", padding: 0, height: \"auto\" };\n    case \"danger\":\n      return { background: colors.statusError, color: \"#FFFFFF\", border: \"1px solid transparent\" };\n  }\n}\n\nfunction ButtonImpl<C extends ElementType = \"button\">(\n  {\n    as,\n    variant = \"primary\",\n    size = \"md\",\n    loading,\n    disabled,\n    iconLeading,\n    iconTrailing,\n    fullWidth,\n    className,\n    style,\n    children,\n    ...rest\n  }: ButtonProps<C>,\n  ref: ForwardedRef<Element>,\n) {\n  const Component = (as ?? \"button\") as ElementType;\n  const { colors } = useTheme();\n  const dims = sizeMap[size];\n  const computed: CSSProperties = {\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    gap: spacing[2],\n    height: variant === \"link\" ? \"auto\" : dims.h,\n    padding: variant === \"link\" ? 0 : `0 ${dims.padX}px`,\n    fontSize: dims.fontSize,\n    fontWeight: 600,\n    fontFamily: \"inherit\",\n    borderRadius: variant === \"link\" ? 0 : radius.md,\n    cursor: disabled || loading ? \"not-allowed\" : \"pointer\",\n    opacity: disabled ? 0.55 : 1,\n    width: fullWidth ? \"100%\" : undefined,\n    transition: \"filter 0.15s ease, transform 0.05s ease, background 0.15s ease\",\n    ...variantStyle(variant, colors),\n    ...style,\n  };\n  return (\n    <Component\n      ref={ref}\n      className={className}\n      style={computed}\n      disabled={disabled || loading || undefined}\n      aria-busy={loading || undefined}\n      {...rest}\n    >\n      {iconLeading}\n      {children}\n      {iconTrailing}\n    </Component>\n  );\n}\n\nexport const Button = forwardRef(ButtonImpl) as <C extends ElementType = \"button\">(\n  props: ButtonProps<C>,\n) => React.ReactElement | null;\n"]}