Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat/#18] Button component #19

Merged
merged 13 commits into from
Jan 13, 2025
Merged

[Feat/#18] Button component #19

merged 13 commits into from
Jan 13, 2025

Conversation

minjeoong
Copy link
Collaborator

@minjeoong minjeoong commented Jan 11, 2025

πŸ”₯ Related Issues

βœ… μž‘μ—… 리슀트

  • λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ κ΅¬ν˜„

πŸ”§ μž‘μ—… λ‚΄μš©

스크란샷 2025-01-12 07 12 45

[ λ²„νŠΌ variant ]
λ²„νŠΌ μ’…λ₯˜ μž…λ‹ˆλ‹€. μ§€κΈˆν˜„μž¬ λ””μžμΈμœΌλ‘œλŠ” 3κ°œμž…λ‹ˆλ‹€.
solidPrimary | solidNeutral | outlinePrimary
-> ν”Όκ·Έλ§ˆ κΈ°μ€€ 넀이밍 μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
variant 둜 μž…λ ₯ν•˜λ©΄ 적용 λ©λ‹ˆλ‹€.

[ λ²„νŠΌ size ]
스크란샷 2025-01-12 07 13 37
λ²„νŠΌ μ‚¬μ΄μ¦ˆ 총 3개 μž…λ‹ˆλ‹€.
λ§ˆμ°¬κ°€μ§€λ‘œ size props μ£Όλ©΄ 적용 λ©λ‹ˆλ‹€. small | medium | large

[ λ²„νŠΌ disabled ]
스크란샷 2025-01-12 07 14 32
총 3개의 λ””μžμΈμ€ disabled 된 λ””μžμΈμ΄ μ‘°κΈˆμ”© λ‹€λ¦…λ‹ˆλ‹€.
κ·Έλž˜μ„œ μ§€κΈˆμœΌλ‘œμ„œλŠ” disabled 이 outline 만 λ””μžμΈμ΄ λ‹¬λΌμ„œ
μ˜ˆμ™Έλ‘œ μ μš©ν•˜λ„λ‘ κ΅¬ν˜„ν–ˆλŠ”λ°, μΆ”ν›„ λ””μžμΈμ΄ 더 생긴닀면 μ½”λ“œ 변동이 ν•„μš”ν•  수 μžˆμ„ 것 κ°™μ•„μš”!

[ λ²„νŠΌ interaction ]
스크란샷 2025-01-12 07 15 40
ν•΄λ‹Ή λ²„νŠΌλ“€ 색깔이 μ•ˆ λœ¨λ”λΌκ΅¬μš” 4κ°œκ°€ 색이 λ‹€λ₯Έλ° λ‹€ κ°€μž₯ 밝은 μƒ‰μœΌλ‘œ λ‚˜μ™€ μžˆμ–΄μ„œ
μš°μ„ μ€ μ½”λ©˜νŠΈ λ‹¬μ•„λ’€μŠ΅λ‹ˆλ‹€,,!!

πŸ“£ λ¦¬λ·°μ–΄μ—κ²Œ μ–΄λ– μ‹ κ°€μš”?

πŸ“Έ μŠ€ν¬λ¦°μƒ· / GIF / Link

스크란샷 2025-01-12 07 16 35

@minjeoong minjeoong self-assigned this Jan 11, 2025
@minjeoong minjeoong added ✨ feat κΈ°λŠ₯ κ΅¬ν˜„ πŸ’„ style κΈ°λŠ₯에 영ν–₯을 주지 μ•ŠλŠ” 컀밋, μ½”λ“œ μˆœμ„œ, cssλ“±μ˜ 포맷에 κ΄€ν•œ 컀밋 labels Jan 11, 2025
Copy link
Collaborator

@ocahs9 ocahs9 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

쑰건뢀 μŠ€νƒ€μΌλ§μ΄ λ„ˆλ¬΄ λ§Žμ•„μ„œ 머리 μ•„νŒ μ„ 법도 ν•œλ° 잘 λ°˜μ˜ν–ˆλ„€... κ³ μƒν–ˆμ–΄ πŸ₯Ί
λ…Όμ˜ν•΄λ³΄κ³  싢은 λ‚΄μš©, κ°œμ„ ν•΄λ³Ό 수 μžˆμ„λ§Œν•œ 뢀뢄듀은 μ½”λ©˜νŠΈλ‘œ λ‚¨κ²¨λ’€μœΌλ‹ˆ ν•œλ²ˆ ν™•μΈν•΄μ€˜!!

Comment on lines 34 to 43
<button
className={clsx(
styles.button,
styles[size],
disabled && styles.disabled,
!disabled && variants[variant],
disabled && variant === "outlinePrimary" && styles.disabledOutline
)}
disabled={disabled}
>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3) λ²„νŠΌμ˜ 경우의 μˆ˜κ°€ 정말 λ§Žμ•„μ„œ 이λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‘°κ±΄λΆ€λ‘œ κ²°ν•©ν•˜κΈ° μœ„ν•΄ clsxλ₯Ό μ‚¬μš©ν•˜μ‹  것 κ°™μ•„μš”!
잘λͺ»λœ 방법은 μ ˆλŒ€ μ•„λ‹ˆμ§€λ§Œ @vanilla-extract/recipes μ—μ„œλŠ” recipe λΌλŠ” ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜μ—¬ μ’€ 더 νŽΈλ¦¬ν•˜κ²Œ λ‹€μ–‘ν•œ 쑰건뢀λ₯Ό κ³ λ €ν•˜μ—¬ μŠ€νƒ€μΌμ„ λ™μ μœΌλ‘œ μ μš©ν•  수 μžˆλ„λ‘ 돕고 μžˆλŠ”λ°, μ‹œκ°„μ΄ λœλ‹€λ©΄ recipe둜 μ½”λ“œλ₯Ό κ΅¬μ„±ν•΄λ³΄λŠ” 건 μ–΄λ–¨κΉŒμš”?

λ§Œμ•½ recipe ν•¨μˆ˜λ₯Ό μ μš©ν•œλ‹€λ©΄, μœ„μ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ 같이 λ³€ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

// css.ts μ—μ„œ button ν•¨μˆ˜(recipe)을 import 해와야함, λ°‘μ˜ λ‹€λ₯Έ μ½”λ©˜νŠΈμ—μ„œ μΆ”κ°€ μ„€λͺ… μ˜ˆμ •
export const Button: React.FC<ButtonProps> = ({
  label = "Button",
  leftIcon,
  rightIcon,
  size = "medium",
  variant = "solidPrimary",
  disabled = false,
}) => {
  return (
    <button
      className={button({ size, variant, disabled })}
      disabled={disabled}
    >
      {leftIcon && <div className={icon}>{leftIcon}</div>}
      {label}
      {rightIcon && <div className={icon}>{rightIcon}</div>}
    </button>
  );
};

훨씬 보기 νŽΈν•˜μ§€ μ•Šλ‚˜μš”?!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

κ·Έλž˜μš” μ΄κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.. μ œκ°€ λ°”λΌλ˜ ν˜œμ•ˆμ΄μš”
κ°μ‚¬ν•©λ‹ˆλ‹€ γ…  κ΄‘λͺ… μ°Ύμ•˜λ„€μš” μˆ˜μ •ν•˜κ² μŠ΅λ‹ˆλ‹€

Comment on lines 14 to 23
/**
* Button 곡톡 μ»΄ν¬λ„ŒνŠΈ
* @param label
* @param leftIcon μ™Όμͺ½ μ•„μ΄μ½˜
* @param rightIcon 였λ₯Έμͺ½ μ•„μ΄μ½˜
* @param size λ²„νŠΌ μ‚¬μ΄μ¦ˆ small | medium | large
* @param variant λ²„νŠΌ μ’…λ₯˜ solidPrimary | solidNeutral | outlinePrimary
* @param disabled λΉ„ν™œμ„±ν™” μ—¬λΆ€
* @constructor minjeoong
*/
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p5) κΉ”λ”ν•œ 주석 μ’‹λ„€μš”! ꡳ이 μ§€μš°μ§„ μ•Šμ•„λ„ 될 κ±° κ°™μŠ΅λ‹ˆλ‹€ :)
근데 ν˜Ήμ‹œ 이런 주석은 일일히 νƒ€μ΄ν•‘ν•˜μ‹œλŠ”κ±΄κ°€μš”? μ•„λ‹ˆλ©΄ ν”ŒλŸ¬κ·ΈμΈ κ°™μ€κ²Œ μžˆλŠ”κ±΄κ°€μš”? (ν˜•μ‹μ΄ μž‘ν˜€ μžˆλŠ”κ±° κ°™μ•„μ„œ μ—¬μ­€λ΄…λ‹ˆλ‹€)

Copy link
Collaborator Author

@minjeoong minjeoong Jan 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSDoc(JavaScript Documentation) μž…λ‹ˆλ‹€.
Webstorm κΈ°μ€€, μ»΄ν¬λ„ŒνŠΈ μƒλ‹¨μ—μ„œ "/**" + enter ν‚€ λˆ„λ₯΄λ©΄ μžλ™ μƒμ„±λ©λ‹ˆλ‹€.
VSCode 도 ν•΄λ‹Ή 사항 κ°€λŠ₯ν•˜λ‹€κ³  μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€

Comment on lines 1 to 85
import { style, styleVariants } from "@vanilla-extract/css";
import { color, font } from "@style/styles.css.ts";

export const styles = {
button: style([
font.body01,
{
display: "flex",
alignItems: "center",
justifyContent: "center",
gap: "0.6rem",
borderRadius: "8px",
border: "none",
cursor: "pointer",
transition: "background-color 0.3s",
":focus": {
outline: "none",
},
},
]),
small: style({
height: "3.2rem",

padding: "0.6rem 1.4rem",
}),
medium: style({
height: "3.6rem",

padding: "0.8rem 2rem",
}),
large: style({
height: "4.4rem",
padding: "1.2rem 2.8rem",
}),
disabled: style({
background: color.gray.gray300,
color: color.gray.gray500,
pointerEvents: "none",
}),
disabledOutline: style({
background: "transparent",
border: `1px solid ${color.gray.gray300}`,
color: color.gray.gray400,
}),
icon: style({
height: "2rem",
display: "flex",
alignItems: "center",
}),
};

export const variants = styleVariants({
solidPrimary: {
backgroundColor: color.primary.blue600,
color: "#fff",
":hover": {
backgroundColor: color.primary.blue800,
},
},
solidNeutral: {
backgroundColor: color.gray.gray100,
color: color.gray.gray700,
":hover": {
backgroundColor: color.gray.gray300,
},
":active": {
backgroundColor: color.gray.gray400,
},
},
outlinePrimary: {
border: `0.1rem solid ${color.primary.blue500}`,
backgroundColor: "transparent",
color: color.gray.gray700,
":hover": {
backgroundColor: color.gray.gray100,
},
":active": {
backgroundColor: color.primary.blue300,
border: `0.1rem solid ${color.primary.blue500}`,
},
":focus": {
border: `0.1rem solid ${color.primary.blue500}`,
},
},
});
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3) μœ„μ—μ„œ μ–ΈκΈ‰ν•œ recipeλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄, μ•„λž˜μ™€ 같은 ν˜•μ‹μœΌλ‘œ μ½”λ“œκ°€ λ³€ν•  수 μžˆμ„ 것 κ°™μ•„μš”!
(μ œκ°€ 직접 μž‘μ„±ν•΄λ³΄κΈ΄ ν–ˆμ§€λ§Œ, λ†“μΉœ 뢀뢄이 μžˆμ„ 수 μžˆμœΌλ‹ˆ 잘 μ²΄ν¬ν•΄μ£Όμ„Έμš”..!)

import { recipe } from "@vanilla-extract/recipes";
import { color, font } from "@style/styles.css.ts";

export const button = recipe({
  base: [
    font.body01,
    {
      display: "flex",
      alignItems: "center",
      justifyContent: "center",
      gap: "0.6rem",
      borderRadius: "8px",
      border: "none",
      cursor: "pointer",
      transition: "background-color 0.3s",
      ":focus": {
        outline: "none",
      },
    },
  ],
  variants: {
    size: {
      small: {
        height: "3.2rem",
        padding: "0.6rem 1.4rem",
      },
      medium: {
        height: "3.6rem",
        padding: "0.8rem 2rem",
      },
      large: {
        height: "4.4rem",
        padding: "1.2rem 2.8rem",
      },
    },
    variant: {
      solidPrimary: {
        backgroundColor: color.primary.blue600,
        color: "#fff",
        ":hover": {
          backgroundColor: color.primary.blue800,
        },
      },
      solidNeutral: {
        backgroundColor: color.gray.gray100,
        color: color.gray.gray700,
        ":hover": {
          backgroundColor: color.gray.gray300,
        },
        ":active": {
          backgroundColor: color.gray.gray400,
        },
      },
      outlinePrimary: {
        border: `0.1rem solid ${color.primary.blue500}`,
        backgroundColor: "transparent",
        color: color.gray.gray700,
        ":hover": {
          backgroundColor: color.gray.gray100,
        },
        ":active": {
          backgroundColor: color.primary.blue300,
          border: `0.1rem solid ${color.primary.blue500}`,
        },
        ":focus": {
          border: `0.1rem solid ${color.primary.blue500}`,
        },
      },
    },
    disabled: {
      true: {
        backgroundColor: color.gray.gray300,
        color: color.gray.gray500,
        pointerEvents: "none",
      },
      outlinePrimary: {
        backgroundColor: "transparent",
        border: `1px solid ${color.gray.gray300}`,
        color: color.gray.gray400,
        pointerEvents: "none",
      },
      false: {},
    },
  },
  compoundVariants: [
    {
      variants: { disabled: true, variant: "outlinePrimary" },
      style: {
        backgroundColor: "transparent",
        border: `1px solid ${color.gray.gray300}`,
        color: color.gray.gray400,
      },
    },
  ],
  defaultVariants: {
    size: "medium",
    variant: "solidPrimary",
    disabled: false,
  },
});

export const icon = style({
  height: "2rem",
  display: "flex",
  alignItems: "center",
});

κ°„λ‹¨ν•˜κ²Œ μ½”λ“œ μ„€λͺ… λ“œλ¦¬λ©΄, λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

recipe의 인자둜 λ“€μ–΄κ°€λŠ” 객체의 첫번째 prop인 baseλŠ” 기본적으둜 적용될 style듀을 μ •μ˜ν•΄λ‘‘λ‹ˆλ‹€.

λ‘λ²ˆμ§Έ prop인 variants λŠ” λ‹€μ–‘ν•œ prop에 따라, λ Œλ”λ§ν•  cssλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 이 κ²½μš°μ—λŠ” 총 3κ°€μ§€μ˜ prop이 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. (size, variant, disabled) 그리고 이 3κ°€μ§€μ˜ prop은 κ°€μ§ˆ 수 μžˆλŠ” 값듀이 각각 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, size prop의 κ²½μš°μ—λŠ” "small", "medium", "large" λ₯Ό κ°€μ§ˆ 수 있고, 이에 따라 μ μš©λ˜λŠ” css도 λ‹¬λΌμ§‘λ‹ˆλ‹€.

μ—¬κΈ°μ„œ 핡심은 μ„Έλ²ˆμ§Έ prop인 compoundVariants μž…λ‹ˆλ‹€. λ―Όμ •λ‹˜μ΄ κ΅¬ν˜„ν•œ λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” λ°˜λ“œμ‹œ μ‚¬μš©ν•  수 밖에 μ—†μŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ variantsλ“€μ˜ prop 쀑 disabled: true, variant: "outlinePrimary" 일 κ²½μš°μ—λŠ” νŠΉμ •ν•œ cssλ₯Ό μ μš©ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. (μ œκ°€ 잘 μ΄ν•΄ν–ˆλ‹€λ©΄, μ € 쑰건 2κ°œκ°€ and μ—°μ‚°μœΌλ‘œ λ¬Άμ˜€μ„ λ•Œ μ μš©ν•˜λŠ” μŠ€νƒ€μΌμ΄ λ‹€λ₯Έκ±° κ°™λ”λΌκ΅¬μš”)

κ·Έλž˜μ„œ

compoundVariants: [
    {
      variants: { disabled: true, variant: "outlinePrimary" },
      style: {
        borderColor: "gray",
        backgroundColor: "transparent",
        color: "gray",
      },
    },
  ],

κ³Ό 같은 ν˜•μ‹μœΌλ‘œ, μ‘°κ±΄λ“€μ˜ 쑰합을 variants에 λ„£κ³  κ·Έλ•Œ μ μš©ν•  cssλ₯Ό style에 μ μ–΄λ„£μœΌλ©΄ λ©λ‹ˆλ‹€. (μ½”λ“œλ§Œ 봐도 μ΄ν•΄ν•˜μ‹€κ±°λΌ λ―Ώκ³  더 μžμ„Έν•œ μ„€λͺ…은 μƒλž΅ν•˜κ² μŠ΅λ‹ˆλ‹€)

μ—¬νŠΌ.. μ œκ°€ recipe μ΄μš©ν•΄μ„œ μž‘μ„±ν•΄λ³Έ μ½”λ“œμΈλ° ν•œλ²ˆ μ‚΄νŽ΄λ³΄μ‹œκ³ , recipe둜 변경해도 λ™μΌν•˜κ²Œ μž‘λ™ν•œλ‹€κ³  νŒλ‹¨λœλ‹€λ©΄
recipe둜 λ³€κ²½ν•΄λ³΄λŠ” 것도 쒋을 것 κ°™μ•„μš”! (λ°”μ˜λ©΄ λ‚˜μ€‘μ— ν•©μ‹œλ‹€)

μ°Έκ³  ) https://vanilla-extract.style/documentation/packages/recipes/

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μ•„... μ΄λ ‡κ²Œλ„ λ˜λŠ”κ΅°μš”
κ°μ‚¬ν•©λ‹ˆλ‹€. μˆ˜μ •ν•΄μ„œ PUSH ν–ˆμŠ΅λ‹ˆλ‹€ :)

Comment on lines +22 to +49
wrapper: style({
width: "100%",
display: "flex",
justifyContent: "space-between",
gap: "1rem",
alignItems: "center",
padding: "1rem 2rem",
border: `0.1rem solid ${color.gray.gray200}`,
borderRadius: "8px",
}),
input: base,
error: style([base, { border: `0.1rem solid ${color.red.warning_red200}` }]),
disabledWrapper: style({
background: color.gray.gray300,
pointerEvents: "none",
}),
disabledInput: style([
base,
{
background: color.gray.gray300,
color: color.gray.gray500,
},
]),
icon: style({
height: "2rem",
alignContent: "center",
}),
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p5) 문득 λ“  생각인데, μ €λŠ” wrapper, input, error ... 등등을 ν•˜λ‚˜ ν•˜λ‚˜ export const ν•œ λ’€,
import * as styles from "./μ–΄μ©Œκ΅¬μ €μ©Œκ΅¬" λ°©μ‹μœΌλ‘œ κ°€μ Έμ™€μ„œ styles.wrapper , styles.input λ“±μœΌλ‘œ μ‚¬μš©ν–ˆμ—ˆλŠ”λ°

민정이가 μ‚¬μš©ν•œ 방법은 import { styles } from "@common/component/TextField/styles.css.ts";
둜 κ°€μ Έμ˜¬ 수 μžˆμœΌλ‹ˆκΉŒ μ’€ 더 λΉ λ₯΄κ³  μ‰½κ²Œ import ꡬ문을 μž‘μ„±ν•  수 μžˆλ‹€λŠ” μž₯점이 있긴 ν•˜λ„€!
근데 가독성 μΈ‘λ©΄μ—μ„œλŠ” 뭐가 더 λ‚˜μ€μ§€ κ°„λ‹¨ν•˜κ²ŒλΌλ„ λ…Όμ˜ν•΄λ³΄κ³  싢은데, λ‚˜μ€‘μ— λ‚΄ PR 확인해보고 μ½”λ©˜νŠΈ λ‚¨κ²¨μ€˜ !
(가독성도 λΉ„μŠ·ν•΄λ³΄μΈλ‹€λ©΄, λ‚˜λ„ 민정이 λ°©μ‹λŒ€λ‘œ ν•˜λ‚˜μ˜ 큰 style 객체λ₯Ό μ •μ˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ ν•˜λ €κ³ !)

Copy link
Collaborator Author

@minjeoong minjeoong Jan 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가독성 μΈ‘λ©΄μ—μ„œλŠ” μ΄λ ‡κ²Œ λ¬ΆλŠ” 게 μ’‹λ‹€κ³  μƒκ°ν•΄μš”
근데 λ„ˆλ¬΄ 상관 없이 λ¬Άμ–΄λ²„λ¦¬λŠ” 건 또 μ•ˆ 쒋을 것 κ°™μ•„μ„œ, 또 λ”°λ‘œ μžˆμ–΄μ•Ό ν•˜λŠ” 건 ν•„μš”ν•  것 κ°™μŠ΅λ‹ˆλ‹€

Comment on lines +34 to +49
<div
className={clsx(
styles.wrapper,
!active && styles.disabledWrapper,
state === "error" && styles.error
)}
>
<input
type="text"
className={clsx(styles.input, !active && styles.disabledInput)}
placeholder={placeholder}
value={value}
onChange={onChange}
disabled={!active}
/>
{icon && <div className={styles.icon}>{icon}</div>}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p4) μœ„μ—μ„œ μ‹€μ»· μ–ΈκΈ‰ν•œ clsx.. recipe둜 κ°œμ„  κ°€λŠ₯ν•˜λ‹€λ©΄ κ°œμ„ ν•΄λ³΄λŠ”κ±΄ μ–΄λ–¨κΉŒμš”?

Copy link
Collaborator Author

@minjeoong minjeoong Jan 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

text field λŠ” ν•΄λ‹Ή PR 내에 μˆ˜μ •ν•΄μ„œ μ˜¬λ¦¬κ² μŠ΅λ‹ˆλ‹€

Comment on lines 5 to 12
interface TextFieldProps {
label?: string;
leftIcon?: React.ReactNode;
rightIcon?: React.ReactNode;
size?: "small" | "medium" | "large";
variant?: "solidPrimary" | "solidNeutral" | "outlinePrimary";
disabled?: boolean;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p1) μ—‡ λ‹€μ‹œλ³΄λ‹ˆκΉŒ μ˜€νƒ€ 발견! ButtonProps둜 λ°”κΏ”μ•Όν•  것 κ°™μ•„μš”!
+) μ›ν•˜λŠ” λ™μž‘μ΄ μžˆμ„ μˆ˜λ„ μžˆμœΌλ‹ˆκΉŒ onClick ν•¨μˆ˜λ„ prop으둜 λ„˜κ²¨μ€„ 수 μžˆμ–΄μ•Ό ν•  것 κ°™μ•„μš”!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μˆ˜μ •ν•΄μ„œ μ˜¬λ ΈμŠ΅λ‹ˆλ‹€!

Copy link
Collaborator

@ocahs9 ocahs9 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코리 반영 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€ ~! 좩돌만 ν•΄κ²°ν•˜κ³  λ¨Έμ§€ν•΄μ£Όμ„Έμš”!

@minjeoong minjeoong merged commit b020f49 into develop Jan 13, 2025
1 check passed
@minjeoong minjeoong changed the title [Feat] Button component [Feat/#18] Button component Jan 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ feat κΈ°λŠ₯ κ΅¬ν˜„ πŸ’„ style κΈ°λŠ₯에 영ν–₯을 주지 μ•ŠλŠ” 컀밋, μ½”λ“œ μˆœμ„œ, cssλ“±μ˜ 포맷에 κ΄€ν•œ 컀밋
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] Button μ»΄ν¬λ„ŒνŠΈ κ΅¬ν˜„ (SOLID, OUTLINE)
4 participants