임동욱 임동욱 08-20
refactor: 디자인 예시안의 데모 아이콘도 아이콘 폰트로 바꾼다
예시안 안에 손으로 그린 SVG 도형이 셋 남아 있었다(DemoIcon·DemoStar·DemoCalendar). 이 화면이
곧 사용법 안내라, 버튼·칩·셀렉트 슬롯에 SVG가 들어가 있으면 "아이콘은 이렇게 넣는다"로 잘못
읽힌다 — 실제로 혼동이 생겼다. 셋 다 `fox-ico` 클래스로 바꾼다(CaretRight·Star·CalendarBlank).
호출부 69곳은 그대로다.

폰트 아이콘은 `width`/`height`가 아니라 `font-size`가 크기를 정한다. FoxSelect 힌트 아이콘
15곳의 `style`도 함께 바꿨다.

아이콘 슬롯 prop 주석도 고친다 — "`currentColor`로 그린 SVG여야 한다"가 다섯 컴포넌트에 남아
있어 같은 혼동을 계속 만든다. 마크업 계약을 그대로 적는다.

`DemoThumb`(320×180)만 SVG로 둔다 — 아이콘이 아니라 카드·모달의 사진 자리를 채우는 그림이다.

확인: 예시안의 버튼 아이콘이 "Fox Icons Regular" 16×16으로 그려지고 글리프가 실린다.
칩의 달력도 CalendarBlank로 나온다. 예시안 어디에도 ``가 남지 않는다(썸네일 제외).

Co-Authored-By: Claude Opus 5 
@22f515f17fa7648ad92bf29f8414a25fcd943bd9
@fox/core/components/fox-button/fox-button.tsx
--- @fox/core/components/fox-button/fox-button.tsx
+++ @fox/core/components/fox-button/fox-button.tsx
@@ -14,7 +14,7 @@
   htmlType?: "button" | "submit" | "reset";
   /** 배치 조정용. 모양이 달라야 하면 여기 말고 `type`을 추가한다. */
   className?: string;
-  /** `currentColor`로 그린 SVG여야 계열별 색이 적용된다. 크기는 슬롯이 정한다. */
+  /** 아이콘 폰트를 넘긴다 — `<i class="fox-ico fox-ico-House" aria-hidden="true" />`. 크기·색은 슬롯이 정한다. */
   leadingIcon?: ReactNode;
   trailingIcon?: ReactNode;
   label: string;
@fox/core/components/fox-icon-button/fox-icon-button.tsx
--- @fox/core/components/fox-icon-button/fox-icon-button.tsx
+++ @fox/core/components/fox-icon-button/fox-icon-button.tsx
@@ -13,7 +13,7 @@
   htmlType?: "button" | "submit" | "reset";
   /** 배치 조정용. 모양이 달라야 하면 여기 말고 `type`을 추가한다. */
   className?: string;
-  /** `currentColor`로 그린 SVG여야 계열별 색이 적용된다. 크기는 슬롯이 정한다. */
+  /** 아이콘 폰트를 넘긴다 — `<i class="fox-ico fox-ico-House" aria-hidden="true" />`. 크기·색은 슬롯이 정한다. */
   icon: ReactNode;
   /** 글자가 보이지 않으므로 `aria-label`이 된다. 무엇을 하는 버튼인지 적는다. */
   label: string;
@fox/core/components/fox-input/fox-input.tsx
--- @fox/core/components/fox-input/fox-input.tsx
+++ @fox/core/components/fox-input/fox-input.tsx
@@ -45,7 +45,7 @@
   message?: string;
   /** 헬퍼 메시지 앞 아이콘. `currentColor`로 그려야 상태 색을 따라간다. */
   messageIcon?: ReactNode;
-  /** 입력 오른쪽 아이콘. `currentColor`로 그린 SVG여야 색이 적용된다. */
+  /** 입력 오른쪽 아이콘. 아이콘 폰트를 넘긴다 — `<i class="fox-ico fox-ico-House" aria-hidden="true" />`. */
   icon?: ReactNode;
   /** 입력 오른쪽에 붙는 글자. 아이콘 슬롯과 달리 크기가 글자에 맞춰진다. */
   suffix?: ReactNode;
@fox/core/components/fox-text-button/fox-text-button.tsx
--- @fox/core/components/fox-text-button/fox-text-button.tsx
+++ @fox/core/components/fox-text-button/fox-text-button.tsx
@@ -13,7 +13,7 @@
   htmlType?: "button" | "submit" | "reset";
   /** 배치 조정용. 모양이 달라야 하면 여기 말고 `type`을 추가한다. */
   className?: string;
-  /** `currentColor`로 그린 SVG여야 계열별 색이 적용된다. 크기는 슬롯이 정한다. */
+  /** 아이콘 폰트를 넘긴다 — `<i class="fox-ico fox-ico-House" aria-hidden="true" />`. 크기·색은 슬롯이 정한다. */
   leadingIcon?: ReactNode;
   trailingIcon?: ReactNode;
   label: string;
@fox/dev-test/component-registry.tsx
--- @fox/dev-test/component-registry.tsx
+++ @fox/dev-test/component-registry.tsx
@@ -75,29 +75,15 @@
   variants: { label: string; node: ReactNode }[];
 }
 
-// 자리 확인용 도형. `currentColor`로 그려야 계열별 색이 입혀진다. style은 FoxSelect
-// 힌트 아이콘처럼 크기를 줄여 써야 하는 자리에 쓴다.
+// 자리 확인용 아이콘. 이 예시안이 곧 사용법 안내라 아이콘 폰트(`fox-ico`)를 그대로 쓴다 —
+// 손으로 그린 SVG를 두면 "아이콘은 이렇게 넣는다"로 잘못 읽힌다.
+// 크기는 `font-size`가 정한다. style은 FoxSelect 힌트처럼 작게 써야 하는 자리에 쓴다.
 function DemoIcon({ style }: { style?: CSSProperties } = {}) {
-  return (
-    <svg
-      viewBox="0 0 16 16"
-      fill="none"
-      stroke="currentColor"
-      strokeWidth="2"
-      aria-hidden="true"
-      style={style}
-    >
-      <path d="M6 3l5 5-5 5" />
-    </svg>
-  );
+  return <i className="fox-ico fox-ico-CaretRight" aria-hidden="true" style={style} />;
 }
 
 function DemoStar() {
-  return (
-    <svg viewBox="0 0 16 16" fill="currentColor" aria-hidden="true">
-      <path d="M8 1.6l1.9 4 4.4.6-3.2 3 .8 4.3L8 11.5l-3.9 2 .8-4.3-3.2-3 4.4-.6z" />
-    </svg>
-  );
+  return <i className="fox-ico fox-ico--fill fox-ico-Star" aria-hidden="true" />;
 }
 
 // overlay 계열은 어두운 반투명 배경이라 밝은 바탕 위에서는 대비를 볼 수 없다.
@@ -593,15 +579,9 @@
   { value: "amount", label: "금액 높은순" },
 ];
 
-// FoxChip select 계열의 앞 아이콘 자리를 확인하기 위한 달력 도형(시안이 그 자리에 달력을
-// 쓴다). `currentColor`로 그려야 상태별 글자 색을 따라간다.
+// FoxChip select 계열의 앞 아이콘 자리(시안이 그 자리에 달력을 쓴다).
 function DemoCalendar() {
-  return (
-    <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.3" aria-hidden="true">
-      <rect x="2" y="3" width="12" height="11" rx="1.5" />
-      <path d="M2 6.5h12M5.5 1.5v3M10.5 1.5v3" />
-    </svg>
-  );
+  return <i className="fox-ico fox-ico-CalendarBlank" aria-hidden="true" />;
 }
 
 function ModalDemo({
@@ -1497,9 +1477,9 @@
         label: "크기 (size)",
         node: (
           <div className={styles.demoFields}>
-            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
+            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
           </div>
         ),
       },
@@ -1507,9 +1487,9 @@
         label: "완료(값 선택됨)",
         node: (
           <div className={styles.demoFields}>
-            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} defaultValue="a" hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} defaultValue="a" hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} defaultValue="a" hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
+            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} defaultValue="a" hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} defaultValue="a" hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} defaultValue="a" hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
           </div>
         ),
       },
@@ -1517,9 +1497,9 @@
         label: "error",
         node: (
           <div className={styles.demoFields}>
-            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} error hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} error hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} error hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
+            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} error hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} error hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} error hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
           </div>
         ),
       },
@@ -1527,9 +1507,9 @@
         label: "disabled",
         node: (
           <div className={styles.demoFields}>
-            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} disabled hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} disabled hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} disabled hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
+            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} disabled hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} disabled hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} disabled hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
           </div>
         ),
       },
@@ -1537,9 +1517,9 @@
         label: "view (조회 전용)",
         node: (
           <div className={styles.demoFields}>
-            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} defaultValue="a" readOnly hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} defaultValue="a" readOnly hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
-            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} defaultValue="a" readOnly hint="힌트 메시지" hintIcon={<DemoIcon style={{ width: 12, height: 12 }} />} />
+            <FoxSelect size="lg" label="레이블" options={SELECT_ITEMS} defaultValue="a" readOnly hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="md" label="레이블" options={SELECT_ITEMS} defaultValue="a" readOnly hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
+            <FoxSelect size="sm" label="레이블" options={SELECT_ITEMS} defaultValue="a" readOnly hint="힌트 메시지" hintIcon={<DemoIcon style={{ fontSize: 12 }} />} />
           </div>
         ),
       },
Add a comment
List