+
{icon}
)}
- {title &&
{title}
}
+ {title && (
+
+ {title}
+
+ )}
{description && (
-
{description}
+
+ {description}
+
)}
{children}
diff --git a/src/shared/button.tsx b/src/shared/button.tsx
index e619f4e..5b966bd 100644
--- a/src/shared/button.tsx
+++ b/src/shared/button.tsx
@@ -33,35 +33,19 @@ function computePlan(props: ButtonProps) {
// 1️⃣ Hero
if (props.preset === "hero") {
- const intent = props.intent ?? "primary";
- const glow = props.glow ?? false;
- const pill = props.pill ?? true;
+ const size = props.size ?? "sm";
- const classes = getButtonClasses("hero", { intent, glow, pill });
- const native = omitKeys(props, [
- "preset",
- "intent",
- "glow",
- "pill",
- "className",
- "asChild",
- "children",
- ] as const);
+ const classes = getButtonClasses("hero", { size });
+ const native = omitKeys(props, ["preset", "size", "className", "asChild", "children"] as const);
return { asChild, className, children, classes, native };
}
// 2️⃣ Feature
if (props.preset === "feature") {
- const radius = props.radius ?? "2xl";
+ const size = props.size ?? "sm";
- const classes = getButtonClasses("feature", { radius });
- const native = omitKeys(props, [
- "preset",
- "radius",
- "className",
- "asChild",
- "children",
- ] as const);
+ const classes = getButtonClasses("feature", { size });
+ const native = omitKeys(props, ["preset", "size", "className", "asChild", "children"] as const);
return { asChild, className, children, classes, native };
}
diff --git a/src/types/button.ts b/src/types/button.ts
index d58af65..168d6c1 100644
--- a/src/types/button.ts
+++ b/src/types/button.ts
@@ -3,7 +3,7 @@ import type { VariantProps } from "class-variance-authority";
import type { ButtonHTMLAttributes } from "react";
export type ButtonPreset = "hero" | "feature" | "auth" | "signup" | "cta" | "back";
-export type ButtonIntent = "primary";
+export type Size = "sm" | "md";
export type Radius = "sm" | "md" | "lg" | "xl" | "2xl";
export type AuthColor = "black" | "white";
export type SignupBg = "basic" | "google" | "kakao";
@@ -17,22 +17,17 @@ export interface BaseButtonProps extends ButtonHTMLAttributes
/** hero 전용 */
export type HeroProps = BaseButtonProps & {
preset: "hero";
- intent?: ButtonIntent;
- glow?: boolean;
- pill?: boolean;
+ size?: Size;
// 금지
- radius?: never;
color?: never;
+ bg?: never;
};
/** feature 전용 */
export type FeatureProps = BaseButtonProps & {
preset: "feature";
- radius?: Radius;
+ size?: Size;
// 금지
- intent?: never;
- glow?: never;
- pill?: never;
color?: never;
};
@@ -41,10 +36,8 @@ export type AuthProps = BaseButtonProps & {
preset: "auth";
color?: AuthColor;
// 금지
- intent?: never;
- glow?: never;
- pill?: never;
- radius?: never;
+ size?: Size;
+ bg?: never;
};
/** signup 전용 */
@@ -52,10 +45,7 @@ export type SignupProps = BaseButtonProps & {
preset: "signup";
bg?: SignupBg;
// 금지
- intent?: never;
- glow?: never;
- pill?: never;
- radius?: never;
+ size?: Size;
color?: never;
};
@@ -64,10 +54,7 @@ export type CtaProps = BaseButtonProps & {
preset: "cta";
disabled?: boolean;
// 금지
- intent?: never;
- glow?: never;
- pill?: never;
- radius?: never;
+ size?: Size;
color?: never;
bg?: never;
};
@@ -77,10 +64,7 @@ export type BackProps = BaseButtonProps &
VariantProps & {
preset: "back";
// 금지
- intent?: never;
- glow?: never;
- pill?: never;
- radius?: never;
+ size?: Size;
color?: never;
bg?: never;
};
diff --git a/src/types/feature-button.ts b/src/types/feature-button.ts
index a87fee6..7101614 100644
--- a/src/types/feature-button.ts
+++ b/src/types/feature-button.ts
@@ -1,7 +1,10 @@
import type * as React from "react";
-/** 공통 스케일 */
-export type Radius = "sm" | "md" | "lg" | "xl" | "2xl";
+/** Feature 버튼 사이즈 스케일 (Button preset과 동일) */
+export type FeatureSize = "sm" | "md";
+
+/** 아이콘 박스 라운드 스케일 */
+export type IconRadius = "sm" | "md" | "lg" | "xl" | "2xl";
/** 네이티브 버튼 프롭(불필요/충돌 키 제거) */
type NativeButtonProps = Omit<
@@ -17,9 +20,6 @@ type NativeButtonProps = Omit<
/** 내부 조합에서 사용하지 말아야 할 키를 미리 차단(컴파일 타임 오류) */
type DisallowedPresetKeys = {
preset?: never;
- intent?: never;
- glow?: never;
- pill?: never;
};
/** FeatureGroupButton 전용 프롭 (콘텐츠/구성 전담) */
@@ -30,10 +30,10 @@ export interface FeatureGroupButtonProps extends NativeButtonProps, DisallowedPr
title: string;
/** 보조 설명(선택) */
description?: string;
- /** 바깥 곡률(테마 변수 매핑) */
- radius?: Radius;
+ /** Feature 버튼 사이즈 (Button preset과 동일) */
+ size?: FeatureSize;
/** 아이콘 박스 곡률(테마 변수 매핑) */
- iconRadius?: Radius;
+ iconRadius?: IconRadius;
/** 유틸 클래스 */
className?: string;
}