임동욱 임동욱 09-22
Revert "Merge branch 'fix/table-alignment-convention' into hub"
This reverts commit baae92a, reversing
changes made to 726f941.
@64b5dee4e231fb1d641e742437090617f6c63f84
@fox/dev-test/component-registry.tsx
--- @fox/dev-test/component-registry.tsx
+++ @fox/dev-test/component-registry.tsx
@@ -3069,7 +3069,7 @@
     id: "fox-table",
     name: "FoxTable",
     description:
-      "Figma 시안 9종(tbl-basic · tbl-list · tbl-form과 각각의 행·칸)을 FoxTable / FoxTableRow / FoxTableCell 셋으로 옮겼습니다. 진짜 <table>이라 스크린리더가 행·열을 읽어 주고 colSpan·rowSpan이 그대로 동작합니다. 머리행은 head만 주면 <thead>로 알아서 갈립니다. 창을 768px 아래로 좁히면 list는 카드로 접히고 form은 레이블이 입력 위로 올라갑니다. 열 정렬은 통용 관례를 따릅니다 — 기본 왼쪽, 비교하는 숫자는 align=\"end\", 이미지·체크박스·버튼·배지는 align=\"center\", 머리칸은 본문과 같게(시안의 가운데 기본은 쓰지 않습니다 · 사용자 확정).",
+      "Figma 시안 9종(tbl-basic · tbl-list · tbl-form과 각각의 행·칸)을 FoxTable / FoxTableRow / FoxTableCell 셋으로 옮겼습니다. 진짜 <table>이라 스크린리더가 행·열을 읽어 주고 colSpan·rowSpan이 그대로 동작합니다. 머리행은 head만 주면 <thead>로 알아서 갈립니다. 창을 768px 아래로 좁히면 list는 카드로 접히고 form은 레이블이 입력 위로 올라갑니다.",
     variants: [
       {
         label: "list 표 예시 — 시안 699:6304 그대로. 체크·정렬·버튼·고른 줄",
@fox/styles/_fox-table.scss
--- @fox/styles/_fox-table.scss
+++ @fox/styles/_fox-table.scss
@@ -17,7 +17,7 @@
 //     </tbody>
 //   </table>
 //
-// 세 타입은 뼈대가 같고 여백·글자만 다르다. 그 차이를 클래스가 아니라 커스텀
+// 세 타입은 뼈대가 같고 여백·글자·기본 정렬만 다르다. 그 차이를 클래스가 아니라 커스텀
 // 프로퍼티로 내려보낸다 — 칸에 `.fox-table--basic .fox-table-cell`처럼 후손 선택자를 쓰면
 // 표 안에 표가 들어갔을 때 바깥 표의 규칙이 안쪽까지 덮어쓴다. 커스텀 프로퍼티는 안쪽
 // 표가 자기 값으로 다시 덮으므로 그 문제가 없다.
@@ -26,11 +26,6 @@
 // (시안 device 축). 표 요소를 `display: block`으로 바꿔 만드는데, 그러면 표 의미가 사라져
 // 스크린리더가 행·열을 읽지 못한다. 그래서 `list`의 칸은 `label`을 함께 받아 카드에서
 // 열 이름을 글자로 보여 준다.
-//
-// 열 정렬 규약(사용자 확정, 2026-09-22) — 시안(tbl-basic·tbl-list)은 가운데였지만 데이터 표의
-// 통용 관례를 따른다: **기본은 왼쪽**(글자·식별번호·날짜), 비교·합산하는 숫자(금액·건수·순번)는
-// `align="end"`, 이미지·체크박스·아이콘·버튼·알약형 배지는 `align="center"`. 머리칸은 본문 열과
-// 같은 정렬이다. 근거: A List Apart(Rutter)·Material·Carbon·GOV.UK 표 지침.
 //
 // 토큰이 아닌 값:
 //   - form 머리칸의 최소 크기 12rem×4.8rem: 시안 값이나 Figma가 변수로 export하지
@@ -50,8 +45,8 @@
   --fox-table-head-font-family: #{fox.font-family(title)};
   --fox-table-head-font-weight: #{fox.font-weight(bold)};
   --fox-table-head-line-height: 1.4;
-  --fox-table-head-align: start;
-  --fox-table-body-align: start;
+  --fox-table-head-align: center;
+  --fox-table-body-align: center;
   --fox-table-head-min-inline-size: 0;
   --fox-table-cell-min-block-size: 0;
 
@@ -64,7 +59,7 @@
     --fox-table-body-padding-block: #{fox.padding(3)};
   }
 
-  // 입력표는 여백이 넓다.
+  // 입력표는 레이블 열이 왼쪽에 서고 여백이 넓다.
   &--form {
     --fox-table-cell-padding-inline: #{fox.padding(6)};
     --fox-table-head-padding-block: #{fox.padding(6)};
app/(protected)/(basic)/admins/_components/admin-member-list.tsx
--- app/(protected)/(basic)/admins/_components/admin-member-list.tsx
+++ app/(protected)/(basic)/admins/_components/admin-member-list.tsx
@@ -122,7 +122,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 160,
       render: (row) => (
         <AdminMemberRowActions
app/(protected)/(basic)/admins/menus/_components/admin-menu-list.tsx
--- app/(protected)/(basic)/admins/menus/_components/admin-menu-list.tsx
+++ app/(protected)/(basic)/admins/menus/_components/admin-menu-list.tsx
@@ -118,6 +118,7 @@
     {
       key: 'name',
       header: '메뉴명',
+      align: 'start',
       render: (row) => (
         <span
           className={styles.name}
@@ -144,7 +145,7 @@
         </span>
       ),
     },
-    { key: 'sortOrder', header: '메뉴순번', align: 'end', width: 120 },
+    { key: 'sortOrder', header: '메뉴순번', width: 120 },
     {
       key: 'roleName',
       header: '권한',
@@ -154,7 +155,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 160,
       render: (row) => (
         <FoxButtonGroup size="sm" align="center">
app/(protected)/(basic)/boards/_components/board-post-columns.tsx
--- app/(protected)/(basic)/boards/_components/board-post-columns.tsx
+++ app/(protected)/(basic)/boards/_components/board-post-columns.tsx
@@ -36,7 +36,6 @@
   return {
     key: 'category',
     header: '구분',
-    align: 'center',
     width: 120,
     render: (row) =>
       row.categoryCode ? (
@@ -70,7 +69,6 @@
   return {
     key: 'actions',
     header: '관리',
-    align: 'center',
     width: 120,
     render: (row) => (
       <span onClick={(event) => event.stopPropagation()}>
@@ -88,7 +86,6 @@
     {
       key: 'attachment',
       header: '첨부',
-      align: 'center',
       width: 100,
       render: (row) =>
         row.attachmentId ? (
@@ -248,7 +245,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 160,
       render: (row) => (
         <InquiryRowActions post={row} answerStatuses={answerStatuses} />
app/(protected)/(basic)/contents/comics/_components/comics-list.tsx
--- app/(protected)/(basic)/contents/comics/_components/comics-list.tsx
+++ app/(protected)/(basic)/contents/comics/_components/comics-list.tsx
@@ -91,7 +91,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 120,
       render: (row) => (
         <ContentRowActions
app/(protected)/(basic)/contents/quizzes/_components/quizzes-list.tsx
--- app/(protected)/(basic)/contents/quizzes/_components/quizzes-list.tsx
+++ app/(protected)/(basic)/contents/quizzes/_components/quizzes-list.tsx
@@ -98,7 +98,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 120,
       render: (row) => (
         <ContentRowActions
app/(protected)/(basic)/contents/shorts/_components/shorts-list.tsx
--- app/(protected)/(basic)/contents/shorts/_components/shorts-list.tsx
+++ app/(protected)/(basic)/contents/shorts/_components/shorts-list.tsx
@@ -91,7 +91,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 120,
       render: (row) => (
         <ContentRowActions
app/(protected)/(basic)/decoration-items/_components/decoration-item-list.tsx
--- app/(protected)/(basic)/decoration-items/_components/decoration-item-list.tsx
+++ app/(protected)/(basic)/decoration-items/_components/decoration-item-list.tsx
@@ -92,7 +92,6 @@
     {
       key: 'thumbnail',
       header: '썸네일',
-      align: 'center',
       width: 160,
       render: (row) =>
         row.imageUrl ? (
@@ -118,7 +117,6 @@
     {
       key: 'points',
       header: '포인트',
-      align: 'end',
       width: 160,
       render: (row) => formatDecorationItemPoints(row.points),
     },
@@ -133,7 +131,7 @@
         />
       ),
     },
-    { key: 'sortOrder', header: '정렬순서', align: 'end', width: 80 },
+    { key: 'sortOrder', header: '정렬순서', width: 80 },
     {
       key: 'updatedAt',
       header: '수정일시',
@@ -143,7 +141,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 160,
       render: (row) => (
         <DecorationItemRowActions
app/(protected)/(basic)/points/accumulated/_components/point-account-list.tsx
--- app/(protected)/(basic)/points/accumulated/_components/point-account-list.tsx
+++ app/(protected)/(basic)/points/accumulated/_components/point-account-list.tsx
@@ -83,9 +83,9 @@
     { key: 'loginId', header: '아이디', width: 140 },
     { key: 'studentName', header: '학생명', width: 120, emphasis: true },
     { key: 'schoolName', header: '학교명', width: 160 },
-    { key: 'grade', header: '학년', width: 80 },
-    { key: 'classNo', header: '반', width: 80 },
-    { key: 'studentNo', header: '번호', width: 80 },
+    { key: 'grade', header: '학년', width: 80, align: 'center' },
+    { key: 'classNo', header: '반', width: 80, align: 'center' },
+    { key: 'studentNo', header: '번호', width: 80, align: 'center' },
     {
       key: 'totalPoint',
       header: '총 포인트',
@@ -124,7 +124,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 100,
       render: (row) => (
         <FoxIconButton
app/(protected)/(basic)/points/standards/_components/point-standard-list.tsx
--- app/(protected)/(basic)/points/standards/_components/point-standard-list.tsx
+++ app/(protected)/(basic)/points/standards/_components/point-standard-list.tsx
@@ -116,7 +116,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 120,
       render: (row) => <PointStandardRowActions standard={row} eventCodes={eventCodes} />,
     },
app/(protected)/(basic)/system/banned-words/_components/banned-word-list.tsx
--- app/(protected)/(basic)/system/banned-words/_components/banned-word-list.tsx
+++ app/(protected)/(basic)/system/banned-words/_components/banned-word-list.tsx
@@ -95,7 +95,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 100,
       render: (row) => (
         <FoxIconButton
app/(protected)/(basic)/system/codes/_components/code-management.tsx
--- app/(protected)/(basic)/system/codes/_components/code-management.tsx
+++ app/(protected)/(basic)/system/codes/_components/code-management.tsx
@@ -162,7 +162,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 120,
       render: (row) => (
         <CodeRowActions
@@ -206,7 +205,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 120,
       render: (row) => (
         <CodeRowActions
app/(protected)/(basic)/system/menus/_components/menu-tree-list.tsx
--- app/(protected)/(basic)/system/menus/_components/menu-tree-list.tsx
+++ app/(protected)/(basic)/system/menus/_components/menu-tree-list.tsx
@@ -64,7 +64,6 @@
     { key: 'id', header: '번호', width: 100 },
     {
       key: 'toggle',
-      align: 'center',
       header: (
         <button
           type="button"
@@ -107,7 +106,7 @@
         </span>
       ),
     },
-    { key: 'sortOrder', header: '메뉴순번', width: 120, align: 'end' },
+    { key: 'sortOrder', header: '메뉴순번', width: 120, align: 'center' },
     {
       key: 'isActive',
       header: '활성여부',
@@ -128,7 +127,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 140,
       render: (row) => (
         <MenuRowActions
app/(protected)/(basic)/system/merchant-details/_components/merchant-detail-list.tsx
--- app/(protected)/(basic)/system/merchant-details/_components/merchant-detail-list.tsx
+++ app/(protected)/(basic)/system/merchant-details/_components/merchant-detail-list.tsx
@@ -189,6 +189,7 @@
       key: 'no',
       header: 'No',
       width: 72,
+      align: 'center',
       render: (_row, index) => (currentPage - 1) * query.pageSize + index + 1,
     },
     {
@@ -225,13 +226,14 @@
       key: 'productCount',
       header: '메뉴',
       width: 72,
-      align: 'end',
+      align: 'center',
       render: (row) => (row.productCount === null ? EMPTY_FIELD_PLACEHOLDER : String(row.productCount)),
     },
     {
       key: 'status',
       header: '상태',
       width: 110,
+      align: 'center',
       render: (row) =>
         row.hasDetail && row.isVisible !== null ? (
           <FoxStatusIndicator
@@ -246,6 +248,7 @@
       key: 'registeredAt',
       header: '등록일',
       width: 120,
+      align: 'center',
       render: (row) => formatOptionalValue(row.registeredAt),
     },
     {
app/(protected)/(basic)/system/merchant-details/_components/merchant-product-table.tsx
--- app/(protected)/(basic)/system/merchant-details/_components/merchant-product-table.tsx
+++ app/(protected)/(basic)/system/merchant-details/_components/merchant-product-table.tsx
@@ -61,9 +61,9 @@
             <FoxTableCell head width={140} align="center">이미지</FoxTableCell>
             <FoxTableCell head width={240}>메뉴명</FoxTableCell>
             <FoxTableCell head>설명</FoxTableCell>
-            <FoxTableCell head width={140} align="end">가격</FoxTableCell>
+            <FoxTableCell head width={140} align="center">가격</FoxTableCell>
             <FoxTableCell head width={180} align="center">배지</FoxTableCell>
-            <FoxTableCell head width={96}>노출</FoxTableCell>
+            <FoxTableCell head width={96} align="center">노출</FoxTableCell>
             <FoxTableCell head width={220} align="center">관리</FoxTableCell>
           </FoxTableRow>
 
@@ -85,7 +85,7 @@
                     {product.description ?? EMPTY_FIELD_PLACEHOLDER}
                   </span>
                 </FoxTableCell>
-                <FoxTableCell align="end" label="가격">
+                <FoxTableCell align="center" label="가격">
                   {formatProductPrice(product.price)}
                 </FoxTableCell>
                 <FoxTableCell align="center" label="배지">
@@ -101,7 +101,7 @@
                     </span>
                   )}
                 </FoxTableCell>
-                <FoxTableCell label="노출">
+                <FoxTableCell align="center" label="노출">
                   <FoxStatusIndicator
                     type={product.isVisible ? 'success' : 'default'}
                     label={formatProductVisibilityLabel(product.isVisible)}
app/(protected)/(basic)/system/merchants/_components/merchant-list.tsx
--- app/(protected)/(basic)/system/merchants/_components/merchant-list.tsx
+++ app/(protected)/(basic)/system/merchants/_components/merchant-list.tsx
@@ -110,7 +110,6 @@
     {
       key: 'actions',
       header: '관리',
-      align: 'center',
       width: 120,
       render: (row) => <MerchantRowActions merchant={row} codeTables={codeTables} />,
     },
Add a comment
List