@cashdoc/cashdoc-cms-design-system 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +22 -1
  2. package/package.json +25 -4
  3. package/dist/.gitkeep +0 -0
  4. package/dist/components/Button/Button.d.ts +0 -127
  5. package/dist/components/Button/index.d.ts +0 -1
  6. package/dist/components/Checkbox/Checkbox.d.ts +0 -87
  7. package/dist/components/Checkbox/index.d.ts +0 -2
  8. package/dist/components/DatePicker/DatePicker.d.ts +0 -98
  9. package/dist/components/DatePicker/index.d.ts +0 -2
  10. package/dist/components/DateRangePicker/DateRangePicker.d.ts +0 -93
  11. package/dist/components/DateRangePicker/index.d.ts +0 -2
  12. package/dist/components/Dropdown/Combobox.d.ts +0 -86
  13. package/dist/components/Dropdown/Dropdown.d.ts +0 -106
  14. package/dist/components/Dropdown/Select.d.ts +0 -87
  15. package/dist/components/Dropdown/index.d.ts +0 -3
  16. package/dist/components/FileUpload/FileUpload.d.ts +0 -58
  17. package/dist/components/FileUpload/index.d.ts +0 -2
  18. package/dist/components/ImageUpload/ImageUpload.d.ts +0 -154
  19. package/dist/components/ImageUpload/index.d.ts +0 -2
  20. package/dist/components/LoadingCircle/LoadingCircle.d.ts +0 -76
  21. package/dist/components/LoadingCircle/index.d.ts +0 -1
  22. package/dist/components/Modal/ConfirmModal.d.ts +0 -36
  23. package/dist/components/Modal/DeleteModal.d.ts +0 -33
  24. package/dist/components/Modal/ErrorModal.d.ts +0 -32
  25. package/dist/components/Modal/Modal.d.ts +0 -185
  26. package/dist/components/Modal/SuccessModal.d.ts +0 -31
  27. package/dist/components/Modal/WarningModal.d.ts +0 -35
  28. package/dist/components/Modal/index.d.ts +0 -12
  29. package/dist/components/Pagination/Pagination.d.ts +0 -106
  30. package/dist/components/Pagination/index.d.ts +0 -2
  31. package/dist/components/Popover/Popover.d.ts +0 -75
  32. package/dist/components/Popover/PopoverMenuItem.d.ts +0 -36
  33. package/dist/components/Popover/index.d.ts +0 -3
  34. package/dist/components/RadioButton/RadioButton.d.ts +0 -84
  35. package/dist/components/RadioButton/index.d.ts +0 -1
  36. package/dist/components/SideNavigation/SideNavigation.d.ts +0 -98
  37. package/dist/components/SideNavigation/index.d.ts +0 -1
  38. package/dist/components/Switch/Switch.d.ts +0 -71
  39. package/dist/components/Switch/index.d.ts +0 -1
  40. package/dist/components/Table/Table.d.ts +0 -192
  41. package/dist/components/Table/index.d.ts +0 -2
  42. package/dist/components/TagInput/TagInput.d.ts +0 -118
  43. package/dist/components/TagInput/index.d.ts +0 -1
  44. package/dist/components/Text/Text.d.ts +0 -71
  45. package/dist/components/Text/index.d.ts +0 -2
  46. package/dist/components/TextInput/TextInput.d.ts +0 -94
  47. package/dist/components/TextInput/index.d.ts +0 -2
  48. package/dist/components/TimePicker/TimePicker.d.ts +0 -110
  49. package/dist/components/TimePicker/index.d.ts +0 -2
  50. package/dist/components/Toast/Toaster.d.ts +0 -84
  51. package/dist/components/Toast/index.d.ts +0 -4
  52. package/dist/components/ToolTip/ToolTip.d.ts +0 -110
  53. package/dist/components/ToolTip/index.d.ts +0 -2
  54. package/dist/components/icons/index.d.ts +0 -61
  55. package/dist/components/index.d.ts +0 -21
  56. package/dist/index.d.ts +0 -3
  57. package/dist/index.es.js +0 -5233
  58. package/dist/index.es.js.map +0 -1
  59. package/dist/index.umd.js +0 -2
  60. package/dist/index.umd.js.map +0 -1
  61. package/dist/style.css +0 -1
  62. package/dist/utils/cn.d.ts +0 -3
@@ -1,98 +0,0 @@
1
- import { default as React } from 'react';
2
-
3
- export interface SubMenuItem {
4
- url: string;
5
- title: string;
6
- }
7
- export interface MenuItem {
8
- url: string;
9
- title: string;
10
- icon?: React.ReactNode;
11
- subMenu?: SubMenuItem[];
12
- }
13
- export interface SideNavigationProps {
14
- title?: string;
15
- menus: MenuItem[];
16
- selectedUrl: string;
17
- onMenuClick: (url: string) => void;
18
- headerSlot?: React.ReactNode;
19
- className?: string;
20
- }
21
- /**
22
- * 어플리케이션의 주요 섹션 간 이동을 담당하는 왼쪽 사이드바 메뉴 컴포넌트입니다.
23
- *
24
- * {@link SideNavigation}은 계층형 메뉴 구조(1단계 및 서브메뉴)를 지원하며,
25
- * 현재 사용자의 위치를 시각적으로 강조하여 내비게이션 맥락을 제공합니다.
26
- * 다크 테마(Dark Theme) 스타일로 고정되어 대시보드 및 CMS 관리 도구에 적합합니다.
27
- *
28
- * Radix UI의 Accordion 컴포넌트를 기반으로 구현되어 서브메뉴의 펼침/접힘 동작이
29
- * 부드럽게 처리됩니다.
30
- *
31
- * ## When (언제 사용해야 하는가)
32
- *
33
- * **사용해야 하는 경우:**
34
- * - **메인 내비게이션**: 서비스의 핵심 기능을 상시 노출하고 접근해야 할 때
35
- * - **계층 구조 관리**: 대메뉴와 그에 속한 소메뉴를 구조적으로 보여줘야 할 때
36
- * - **관리자 페이지**: 다양한 관리 도구와 설정 항목을 분류하여 제공할 때
37
- *
38
- * **사용하지 말아야 하는 경우:**
39
- * - **단순 링크 목록**: 3-4개의 단순한 링크라면 상단 내비게이션(GNB)이 더 적절할 수 있습니다.
40
- * - **모바일 전용 탭**: 모바일 앱 스타일의 내비게이션이 필요하다면 하단 탭 바를 고려하세요.
41
- *
42
- * ## Layout behavior
43
- *
44
- * - **Fixed Width**: 기본적으로 `w-70` (280px)의 고정 너비를 가지며, 세로 전체(h-full)를 차지합니다.
45
- * - **Scrollable**: 메뉴 항목이 많아 화면 높이를 넘어가면 메뉴 영역 내부에 스크롤이 발생합니다.
46
- * - **Accordion**: 서브메뉴가 있는 항목 클릭 시 아래로 펼쳐지는 애니메이션이 적용됩니다.
47
- *
48
- * ## Usage guidelines
49
- *
50
- * ### ✅ Do (권장 사항)
51
- *
52
- * - **아이콘 활용**: 각 대메뉴에 적절한 아이콘을 배치하여 사용자가 메뉴의 성격을 빠르게 파악하게 하세요.
53
- * - **상태 연동**: 현재 활성화된 페이지의 URL과 `selectedUrl`을 정확히 일치시켜 하이라이트가 올바르게 표시되도록 하세요.
54
- * - **일관된 그룹화**: 연관된 기능들은 하나의 대메뉴 아래 서브메뉴로 묶어 복잡도를 낮추세요.
55
- *
56
- * ### 🚫 Don't (주의/금지 사항)
57
- *
58
- * - **과도한 계층**: 서브메뉴의 서브메뉴(3단계 이상)는 가급적 피하세요. UI가 복잡해지고 사용성이 떨어집니다.
59
- * - **긴 메뉴 명칭**: 사이드바 너비가 제한적이므로 메뉴 이름은 짧고 명확하게(가급적 10자 이내) 작성하세요.
60
- *
61
- * ## Accessibility
62
- *
63
- * - **Accordion Support**: 서브메뉴 상태를 스크린 리더에서 '펼쳐짐/접힘'으로 인식합니다.
64
- * - **Keyboard Interaction**: `Tab` 키로 메뉴를 이동하고, `Enter`나 `Space`로 메뉴를 열거나 이동할 수 있습니다.
65
- *
66
- * ## Example
67
- *
68
- * {@tool snippet}
69
- * 서브메뉴를 포함한 사이드 네비게이션:
70
- *
71
- * ```tsx
72
- * const menus = [
73
- * { url: '/dashboard', title: '홈', icon: <HomeIcon /> },
74
- * {
75
- * url: '/contents',
76
- * title: '콘텐츠 관리',
77
- * icon: <FileTextIcon />,
78
- * subMenu: [
79
- * { url: '/contents/posts', title: '게시글 목록' },
80
- * { url: '/contents/comments', title: '댓글 관리' },
81
- * ]
82
- * },
83
- * ];
84
- *
85
- * <SideNavigation
86
- * menus={menus}
87
- * selectedUrl="/contents/posts"
88
- * onMenuClick={(url) => navigate(url)}
89
- * />
90
- * ```
91
- * {@end-tool}
92
- *
93
- * See also:
94
- *
95
- * - {@link Button}, 단순 액션 실행을 위한 요소
96
- * - {@link Popover}, 클릭 시 일시적으로 나타나는 추가 메뉴가 필요한 경우
97
- */
98
- export declare const SideNavigation: React.ForwardRefExoticComponent<SideNavigationProps & React.RefAttributes<HTMLDivElement>>;
@@ -1 +0,0 @@
1
- export * from './SideNavigation';
@@ -1,71 +0,0 @@
1
- import { default as React } from 'react';
2
- import { VariantProps } from 'class-variance-authority';
3
-
4
- import * as SwitchPrimitives from "@radix-ui/react-switch";
5
- declare const switchVariants: (props?: ({
6
- variant?: "default" | "green" | "black" | "blue" | "red" | null | undefined;
7
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
- export interface SwitchProps extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>, VariantProps<typeof switchVariants> {
9
- }
10
- /**
11
- * 두 가지 상반된 상태(On/Off, 활성/비활성)를 즉각적으로 전환할 때 사용하는 컴포넌트입니다.
12
- *
13
- * {@link Switch}는 실제 전등 스위치와 같은 직관적인 시각적 모델을 제공하며,
14
- * 체크박스보다 더 '즉각적인 반영'의 의미를 가집니다.
15
- *
16
- * Radix UI의 Switch 컴포넌트를 기반으로 구현되어 접근성과 애니메이션이
17
- * 자동으로 처리됩니다.
18
- *
19
- * ## When (언제 사용해야 하는가)
20
- *
21
- * **사용해야 하는 경우:**
22
- * - **즉각적 설정 반영**: 클릭 즉시 시스템 설정이 변경되거나 저장되어야 할 때 (예: 다크모드 켜기, 알림 수신 동의)
23
- * - **상태 전환**: 특정 기능의 사용 여부를 결정할 때
24
- * - **단순 토글**: 복잡한 입력 없이 켜고 끄는 행위만 필요할 때
25
- *
26
- * **사용하지 말아야 하는 경우:**
27
- * - **제출 버튼 필요**: 여러 정보를 입력하고 '확인' 버튼을 눌러야 결과가 반영되는 폼 내에서는 `Checkbox`를 사용하세요.
28
- * - **다중 선택**: 여러 항목 중 일부를 골라야 할 때도 `Checkbox`가 더 적합합니다.
29
- *
30
- * ## Layout behavior
31
- *
32
- * - **Inline Component**: 주변 텍스트나 다른 요소와 자연스럽게 어우러지는 인라인 블록 형태입니다.
33
- * - **Thumb Animation**: 클릭 시 스위치의 '손잡이(Thumb)'가 부드럽게 좌우로 이동하며 상태 변화를 시각화합니다.
34
- *
35
- * ## Usage guidelines
36
- *
37
- * ### ✅ Do (권장 사항)
38
- *
39
- * - **명확한 현재 상태 표시**: 색상 변화(회색 vs 색상)를 통해 켜져 있는지 꺼져 있는지 한눈에 알 수 있게 하세요.
40
- * - **레이블과 함께 사용**: 스위치 옆에 무엇을 제어하는지 설명하는 텍스트를 반드시 배치하세요.
41
- *
42
- * ### 🚫 Don't (주의/금지 사항)
43
- *
44
- * - **모호한 의미**: 상태 전환 후에 어떤 변화가 생길지 명확하지 않은 경우에는 사용을 지양하세요.
45
- * - **긴 대기 시간**: 서버 통신 등으로 인해 상태 반영에 시간이 걸리는 경우, 로딩 인디케이터를 함께 보여주거나 즉시 반응을 우선 처리하세요.
46
- *
47
- * ## Accessibility
48
- *
49
- * - **Keyboard Support**: `Space` 키를 사용하여 상태를 전환할 수 있습니다.
50
- * - **Roles**: `role="switch"` 속성을 사용하여 스크린 리더에서 토글 상태를 읽어줍니다.
51
- *
52
- * ## Example
53
- *
54
- * {@tool snippet}
55
- * 레이블과 함께 사용하는 기본적인 스위치:
56
- *
57
- * ```tsx
58
- * <div className="flex items-center gap-2">
59
- * <Switch id="airplane-mode" />
60
- * <label htmlFor="airplane-mode">비행기 모드</label>
61
- * </div>
62
- * ```
63
- * {@end-tool}
64
- *
65
- * See also:
66
- *
67
- * - {@link Checkbox}, 제출 전까지 상태를 유지해야 하는 경우
68
- * - {@link RadioButton}, 여러 선택지 중 하나를 고르는 경우
69
- */
70
- declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
71
- export { Switch };
@@ -1 +0,0 @@
1
- export * from './Switch';
@@ -1,192 +0,0 @@
1
- import { default as React } from 'react';
2
- import { VariantProps } from 'class-variance-authority';
3
-
4
- declare const tableVariants: (props?: ({
5
- bordered?: boolean | null | undefined;
6
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
- export interface TableProps extends React.TableHTMLAttributes<HTMLTableElement>, VariantProps<typeof tableVariants> {
8
- /** zebra stripe 패턴 적용 여부 */
9
- striped?: boolean;
10
- /** row hover 효과 적용 여부 */
11
- hoverable?: boolean;
12
- /** 테두리 표시 여부 */
13
- bordered?: boolean;
14
- /** 좁은 padding 적용 여부 */
15
- compact?: boolean;
16
- }
17
- /**
18
- * 데이터를 행과 열로 구조화하여 표시하는 테이블 컴포넌트입니다.
19
- *
20
- * {@link Table}은 Compound Component 패턴을 사용하여 구성되며,
21
- * TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption
22
- * 등의 하위 컴포넌트를 조합하여 유연한 테이블 레이아웃을 만들 수 있습니다.
23
- *
24
- * ## When (언제 사용해야 하는가)
25
- *
26
- * **사용해야 하는 경우:**
27
- * - **데이터 목록**: 사용자 목록, 주문 내역, 제품 리스트 등 구조화된 데이터를 표시할 때
28
- * - **비교**: 여러 항목의 속성을 나란히 비교해야 할 때
29
- * - **정렬 및 필터**: 데이터를 정렬하거나 필터링해서 보여줄 때
30
- * - **대량 데이터**: 많은 양의 정보를 조직적으로 표시해야 할 때
31
- *
32
- * **사용하지 말아야 하는 경우:**
33
- * - **레이아웃 목적**: 단순히 레이아웃을 만들기 위해서는 CSS Grid나 Flexbox를 사용하세요.
34
- * - **소량 데이터**: 2-3개의 간단한 정보는 리스트나 카드 형태가 더 적합할 수 있습니다.
35
- * - **복잡한 인터랙션**: 각 행마다 많은 버튼이나 입력이 필요하다면 카드 레이아웃을 고려하세요.
36
- *
37
- * ## Layout behavior
38
- *
39
- * - **Responsive**: 기본적으로 스크롤 가능한 컨테이너로 래핑되어 모바일에서도 사용 가능합니다.
40
- * - **Full Width**: 부모 컨테이너의 전체 너비를 차지합니다.
41
- * - **Auto Height**: 내용에 따라 높이가 자동으로 조정됩니다.
42
- *
43
- * ## Usage guidelines
44
- *
45
- * ### ✅ Do (권장 사항)
46
- *
47
- * - **명확한 헤더**: TableHead를 사용하여 각 열의 의미를 명확히 표시하세요.
48
- * - **일관된 정렬**: 숫자는 오른쪽, 텍스트는 왼쪽 정렬하는 것이 일반적입니다.
49
- * - **적절한 variant**: 데이터가 많을 때는 `striped`나 `hoverable`을 사용하여 가독성을 높이세요.
50
- * - **Caption 활용**: 테이블의 목적을 설명하는 caption을 추가하면 접근성이 향상됩니다.
51
- *
52
- * ### 🚫 Don't (주의/금지 사항)
53
- *
54
- * - **과도한 열**: 너무 많은 열은 가독성을 해칩니다. 중요한 정보만 표시하세요.
55
- * - **중첩 테이블**: 테이블 안에 테이블을 넣지 마세요. 복잡도가 급격히 증가합니다.
56
- * - **빈 셀 남용**: 빈 셀이 많으면 데이터 구조를 다시 검토하세요.
57
- *
58
- * ## Accessibility
59
- *
60
- * - **Semantic HTML**: 적절한 `<table>`, `<thead>`, `<tbody>`, `<th>`, `<td>` 태그를 사용합니다.
61
- * - **Scope Attribute**: TableHead는 `scope="col"`을 자동으로 가집니다.
62
- * - **ARIA Attributes**: 정렬, 선택 등의 상태는 `aria-sort`, `aria-selected`로 표현됩니다.
63
- * - **Caption**: 테이블의 목적을 설명하는 `<caption>`을 사용할 수 있습니다.
64
- *
65
- * ## Example
66
- *
67
- * {@tool snippet}
68
- * 기본 테이블 사용:
69
- *
70
- * ```tsx
71
- * <Table>
72
- * <TableCaption>사용자 목록</TableCaption>
73
- * <TableHeader>
74
- * <TableRow>
75
- * <TableHead>이름</TableHead>
76
- * <TableHead>이메일</TableHead>
77
- * <TableHead align="right">역할</TableHead>
78
- * </TableRow>
79
- * </TableHeader>
80
- * <TableBody>
81
- * <TableRow>
82
- * <TableCell>홍길동</TableCell>
83
- * <TableCell>hong@example.com</TableCell>
84
- * <TableCell align="right">관리자</TableCell>
85
- * </TableRow>
86
- * </TableBody>
87
- * </Table>
88
- * ```
89
- *
90
- * Striped 테이블:
91
- *
92
- * ```tsx
93
- * <Table striped hoverable>
94
- * <TableHeader>
95
- * <TableRow>
96
- * <TableHead>제품명</TableHead>
97
- * <TableHead align="right">가격</TableHead>
98
- * </TableRow>
99
- * </TableHeader>
100
- * <TableBody>
101
- * {products.map((product) => (
102
- * <TableRow key={product.id}>
103
- * <TableCell>{product.name}</TableCell>
104
- * <TableCell align="right">{product.price}</TableCell>
105
- * </TableRow>
106
- * ))}
107
- * </TableBody>
108
- * </Table>
109
- * ```
110
- * {@end-tool}
111
- */
112
- export declare const Table: React.ForwardRefExoticComponent<TableProps & React.RefAttributes<HTMLTableElement>>;
113
- export interface TableHeaderProps extends React.HTMLAttributes<HTMLTableSectionElement> {
114
- }
115
- /**
116
- * 테이블의 헤더 섹션을 정의하는 컴포넌트입니다.
117
- *
118
- * `<thead>` 태그를 렌더링하며, 보통 `TableRow`와 `TableHead`를 포함하여
119
- * 열의 제목을 표시하는 데 사용됩니다.
120
- */
121
- export declare const TableHeader: React.ForwardRefExoticComponent<TableHeaderProps & React.RefAttributes<HTMLTableSectionElement>>;
122
- export interface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionElement> {
123
- }
124
- /**
125
- * 테이블의 본문 섹션을 정의하는 컴포넌트입니다.
126
- *
127
- * `<tbody>` 태그를 렌더링하며, 실제 데이터가 포함된 `TableRow`와 `TableCell`을
128
- * 포함합니다.
129
- */
130
- export declare const TableBody: React.ForwardRefExoticComponent<TableBodyProps & React.RefAttributes<HTMLTableSectionElement>>;
131
- export interface TableFooterProps extends React.HTMLAttributes<HTMLTableSectionElement> {
132
- }
133
- /**
134
- * 테이블의 푸터 섹션을 정의하는 컴포넌트입니다.
135
- *
136
- * `<tfoot>` 태그를 렌더링하며, 합계나 요약 정보를 표시하는 데 사용됩니다.
137
- */
138
- export declare const TableFooter: React.ForwardRefExoticComponent<TableFooterProps & React.RefAttributes<HTMLTableSectionElement>>;
139
- declare const tableRowVariants: (props?: ({
140
- hoverable?: boolean | null | undefined;
141
- selected?: boolean | null | undefined;
142
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
143
- export interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement>, VariantProps<typeof tableRowVariants> {
144
- /** 선택된 행 표시 여부 */
145
- selected?: boolean;
146
- }
147
- /**
148
- * 테이블의 행(Row)을 정의하는 컴포넌트입니다.
149
- *
150
- * `<tr>` 태그를 렌더링하며, `hoverable`이나 `striped` 속성이 `Table` 컴포넌트에
151
- * 적용되었을 때 이에 따른 스타일을 자동으로 적용합니다.
152
- */
153
- export declare const TableRow: React.ForwardRefExoticComponent<TableRowProps & React.RefAttributes<HTMLTableRowElement>>;
154
- export interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {
155
- /** 정렬 가능 여부 */
156
- sortable?: boolean;
157
- /** 정렬 방향 */
158
- sortDirection?: "asc" | "desc" | null;
159
- /** 정렬 클릭 핸들러 */
160
- onSort?: () => void;
161
- }
162
- /**
163
- * 테이블의 헤더 셀을 정의하는 컴포넌트입니다.
164
- *
165
- * `<th>` 태그를 렌더링하며, 열의 제목을 표시합니다.
166
- * 정렬 기능(`sortable`)을 지원하며, 정렬 방향에 따라 아이콘을 표시할 수 있습니다.
167
- */
168
- export declare const TableHead: React.ForwardRefExoticComponent<TableHeadProps & React.RefAttributes<HTMLTableCellElement>>;
169
- declare const tableCellVariants: (props?: ({
170
- align?: "center" | "right" | "left" | null | undefined;
171
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
172
- export interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement>, VariantProps<typeof tableCellVariants> {
173
- /** 텍스트 정렬 방식 */
174
- align?: "left" | "center" | "right";
175
- }
176
- /**
177
- * 테이블의 데이터 셀을 정의하는 컴포넌트입니다.
178
- *
179
- * `<td>` 태그를 렌더링하며, 실제 데이터를 표시합니다.
180
- * 텍스트 정렬(`align`)을 설정할 수 있습니다.
181
- */
182
- export declare const TableCell: React.ForwardRefExoticComponent<TableCellProps & React.RefAttributes<HTMLTableCellElement>>;
183
- export interface TableCaptionProps extends React.HTMLAttributes<HTMLTableCaptionElement> {
184
- }
185
- /**
186
- * 테이블의 캡션(설명)을 정의하는 컴포넌트입니다.
187
- *
188
- * `<caption>` 태그를 렌더링하며, 스크린 리더 사용자에게 테이블의 목적을
189
- * 설명하는 데 중요한 역할을 합니다.
190
- */
191
- export declare const TableCaption: React.ForwardRefExoticComponent<TableCaptionProps & React.RefAttributes<HTMLTableCaptionElement>>;
192
- export {};
@@ -1,2 +0,0 @@
1
- export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption, } from './Table';
2
- export type { TableProps, TableHeaderProps, TableBodyProps, TableFooterProps, TableRowProps, TableHeadProps, TableCellProps, TableCaptionProps, } from './Table';
@@ -1,118 +0,0 @@
1
- import { default as React } from 'react';
2
- import { VariantProps } from 'class-variance-authority';
3
-
4
- declare const tagInputContainerVariants: (props?: ({
5
- readOnly?: boolean | null | undefined;
6
- layout?: "row" | "column" | null | undefined;
7
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
- export interface TagInputProps extends Omit<VariantProps<typeof tagInputContainerVariants>, "readOnly"> {
9
- label?: string;
10
- required?: boolean;
11
- maxTags?: number;
12
- placeholder?: string;
13
- value?: string[];
14
- onChange?: (tags: string[]) => void;
15
- readOnly?: boolean;
16
- noLimit?: boolean;
17
- validateTag?: (tag: string, currentTags: string[]) => boolean | string | undefined;
18
- className?: string;
19
- id?: string;
20
- labelLayout?: "vertical" | "horizontal";
21
- labelWidth?: string;
22
- }
23
- /**
24
- * 사용자가 텍스트를 입력하여 여러 개의 태그(키워드) 목록을 생성하고 관리할 수 있는 컴포넌트입니다.
25
- *
26
- * {@link TagInput}은 입력창 내부에 시각적인 태그를 표시하며,
27
- * 엔터(Enter) 키를 통해 새로운 태그를 추가하고 'x' 버튼을 눌러 기존 태그를 제거할 수 있습니다.
28
- * 주로 게시글의 태그, 검색 필터 조건, 수신자 목록 등을 입력받을 때 사용됩니다.
29
- *
30
- * ## When (언제 사용해야 하는가)
31
- *
32
- * **사용해야 하는 경우:**
33
- * - **키워드 입력**: 게시글의 해시태그나 카테고리를 입력받을 때
34
- * - **다중 항목 수집**: 여러 개의 이메일 주소나 사용자 아이디를 한꺼번에 입력받아야 할 때
35
- * - **제한된 개수의 항목 선택**: 최대 N개까지의 조건을 입력받아야 할 때 (`maxTags` 활용)
36
- *
37
- * **사용하지 말아야 하는 경우:**
38
- * - **단일 텍스트 입력**: 하나의 값만 필요한 경우 일반 `TextInput`을 사용하세요.
39
- * - **미리 정의된 옵션**: 고정된 목록에서만 선택해야 한다면 `Dropdown`이나 `Combobox`가 더 적합합니다.
40
- *
41
- * ## Layout behavior
42
- *
43
- * - **Flow Layout**: 태그들은 가로 방향으로 나열되며, 공간이 부족하면 자동으로 다음 줄로 넘어갑니다 (`layout="row"`).
44
- * - **Column Layout**: 태그들을 수직으로 쌓고 싶을 경우 `layout="column"` 설정을 사용할 수 있습니다.
45
- * - **Constraint**: `maxTags`에 도달하면 추가 입력이 차단되며 시각적으로 안내됩니다.
46
- *
47
- * 레이블 배치는 `labelLayout` prop으로 제어됩니다:
48
- * - **vertical** (기본값): Label이 태그 입력 필드 위에 세로로 배치됩니다.
49
- * - **horizontal**: Label과 태그 입력 필드가 가로로 나란히 배치됩니다. `labelWidth`로 Label 너비를 조정할 수 있습니다 (기본값: 120px).
50
- *
51
- * ## Usage guidelines
52
- *
53
- * ### ✅ Do (권장 사항)
54
- *
55
- * - **유효성 검사 활용**: `validateTag`를 통해 이메일 형식 확인이나 글자 수 제한 등 비즈니스 로직을 적용하세요.
56
- * - **중복 방지**: 동일한 태그가 입력되지 않도록 자동으로 처리되지만, 필요에 따라 사용자에게 알림을 줄 수 있습니다.
57
- * - **가로 배치 활용**: 폼에서 여러 입력 필드를 정렬할 때는 `labelLayout="horizontal"`을 사용하여 일관된 레이아웃을 유지하세요.
58
- *
59
- * ### 🚫 Don't (주의/금지 사항)
60
- *
61
- * - **너무 긴 태그**: 태그 하나에 너무 긴 문장이 들어가는 것은 피하세요. 가급적 단어나 짧은 구문으로 제한하는 것이 좋습니다.
62
- * - **복잡한 인터페이스**: 태그 내부에 너무 많은 기능을 넣지 마세요. 태그는 가볍고 빠르게 훑어볼 수 있어야 합니다.
63
- *
64
- * ## Accessibility
65
- *
66
- * - **Keyboard Management**: `Enter`로 추가, `Backspace`(구현 예정) 또는 'x' 버튼 클릭으로 삭제가 가능합니다.
67
- * - **Screen Reader**: 추가된 각 태그의 내용과 삭제 버튼의 역할을 음성으로 안내합니다.
68
- *
69
- * ## Example
70
- *
71
- * {@tool snippet}
72
- * 기본적인 태그 입력 예시:
73
- *
74
- * ```tsx
75
- * <TagInput
76
- * label="게시글 태그"
77
- * maxTags={5}
78
- * placeholder="태그 입력 후 Enter"
79
- * value={['React', 'Next.js']}
80
- * onChange={(tags) => console.log(tags)}
81
- * />
82
- * ```
83
- * {@end-tool}
84
- *
85
- * {@tool snippet}
86
- * 커스텀 유효성 검사가 포함된 태그 입력:
87
- *
88
- * ```tsx
89
- * <TagInput
90
- * validateTag={(tag) => {
91
- * if (tag.length < 2) return "태그는 2글자 이상이어야 합니다.";
92
- * return true;
93
- * }}
94
- * />
95
- * ```
96
- * {@end-tool}
97
- *
98
- * {@tool snippet}
99
- * 가로 배치 레이아웃:
100
- *
101
- * ```tsx
102
- * <TagInput
103
- * label="키워드"
104
- * required={true}
105
- * labelLayout="horizontal"
106
- * labelWidth="150px"
107
- * placeholder="태그 입력 후 Enter"
108
- * />
109
- * ```
110
- * {@end-tool}
111
- *
112
- * See also:
113
- *
114
- * - {@link TextInput}, 단순 텍스트 입력이 필요한 경우
115
- * - {@link Combobox}, 목록에서 검색하여 태그를 추가하고 싶은 경우
116
- */
117
- export declare const TagInput: React.ForwardRefExoticComponent<TagInputProps & React.RefAttributes<HTMLDivElement>>;
118
- export {};
@@ -1 +0,0 @@
1
- export * from './TagInput';
@@ -1,71 +0,0 @@
1
- import { default as React } from 'react';
2
- import { VariantProps } from 'class-variance-authority';
3
-
4
- declare const textVariants: (props?: ({
5
- variant?: "h2" | "h3" | "body" | "caption" | "h1" | "subtitle" | "emphasis" | "price" | null | undefined;
6
- align?: "center" | "right" | "left" | null | undefined;
7
- decoration?: "none" | "underline" | "lineThrough" | null | undefined;
8
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
9
- export interface TextProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof textVariants> {
10
- as?: "p" | "span" | "div" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "label";
11
- children: React.ReactNode;
12
- }
13
- /**
14
- * 일관된 타이포그래피 시스템을 적용하기 위한 텍스트 컴포넌트입니다.
15
- *
16
- * {@link Text}는 제목(Heading), 본문(Body), 캡션(Caption) 등 미리 정의된 스타일을 제공하여
17
- * 디자인 일관성을 유지하고 텍스트의 의미적 구조(Semantic Structure)를 쉽게 정의할 수 있게 합니다.
18
- *
19
- * ## When (언제 사용해야 하는가)
20
- *
21
- * **사용해야 하는 경우:**
22
- * - **페이지 제목 및 부제목**: 화면의 위계를 나누는 타이틀을 작성할 때
23
- * - **본문 콘텐츠**: 일반적인 설명글이나 데이터를 표시할 때
24
- * - **캡션 및 힌트**: 부가적인 설명이나 작은 크기의 정보가 필요할 때
25
- * - **정형화된 스타일**: 특정 폰트 두께나 크기를 시스템 규칙에 맞춰 적용해야 할 때
26
- *
27
- * **사용하지 말아야 하는 경우:**
28
- * - **복잡한 스타일링**: 시스템 정의 범위를 크게 벗어나는 특수 스타일은 별도 CSS 클래스를 활용하세요.
29
- *
30
- * ## Layout behavior
31
- *
32
- * - **Semantic Tag**: `as` prop을 통해 실제 HTML 태그(`h1`, `p`, `span` 등)를 결정할 수 있어 SEO와 접근성에 유리합니다.
33
- * - **Alignment**: `align` 속성을 통해 왼쪽, 중앙, 오른쪽 정렬을 손쉽게 조절할 수 있습니다.
34
- *
35
- * ## Usage guidelines
36
- *
37
- * ### ✅ Do (권장 사항)
38
- *
39
- * - **의미론적 태그 사용**: 제목에는 `as="h1"`, 본문에는 `as="p"`를 사용하는 등 맥락에 맞는 태그를 선택하세요.
40
- * - **계층 구조 준수**: 큰 제목(h1) 아래에 작은 제목(h2, h3)이 오도록 논리적인 흐름을 유지하세요.
41
- * - **변형(Variant) 활용**: 폰트 크기와 두께를 직접 조절하기보다 제공되는 `variant`를 우선적으로 사용하세요.
42
- *
43
- * ### 🚫 Don't (주의/금지 사항)
44
- *
45
- * - **과도한 폰트 크기 사용**: 가급적 시스템에서 정의한 크기를 벗어나지 않도록 주의하세요.
46
- * - **의미와 맞지 않는 태그**: 시각적으로만 크게 보이기 위해 제목 태그를 남용하지 마세요.
47
- *
48
- * ## Example
49
- *
50
- * {@tool snippet}
51
- * 다양한 위계의 텍스트 구성:
52
- *
53
- * ```tsx
54
- * <div className="space-y-4">
55
- * <Text variant="h1" as="h1">대시보드</Text>
56
- * <Text variant="subtitle">오늘의 요약 정보입니다.</Text>
57
- * <Text variant="body">
58
- * 현재 활성화된 사용자는 총 1,234명이며, 어제 대비 5% 증가했습니다.
59
- * </Text>
60
- * <Text variant="caption" align="right">최근 업데이트: 2024-01-24</Text>
61
- * </div>
62
- * ```
63
- * {@end-tool}
64
- *
65
- * See also:
66
- *
67
- * - {@link TextInput}, 사용자의 입력을 받는 텍스트 필드
68
- * - {@link Button}, 텍스트를 포함하는 액션 요소
69
- */
70
- export declare const Text: React.ForwardRefExoticComponent<TextProps & React.RefAttributes<HTMLElement>>;
71
- export {};
@@ -1,2 +0,0 @@
1
- export { Text } from './Text';
2
- export type { TextProps } from './Text';
@@ -1,94 +0,0 @@
1
- import { default as React } from 'react';
2
- import { VariantProps } from 'class-variance-authority';
3
-
4
- declare const textInputVariants: (props?: ({
5
- variant?: "default" | "error" | null | undefined;
6
- fullWidth?: boolean | null | undefined;
7
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
- export interface TextInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size">, VariantProps<typeof textInputVariants> {
9
- label?: string;
10
- required?: boolean;
11
- error?: boolean;
12
- errorMessage?: string;
13
- helperText?: string;
14
- showCharCount?: boolean;
15
- labelLayout?: "vertical" | "horizontal";
16
- labelWidth?: string;
17
- }
18
- /**
19
- * 사용자로부터 텍스트, 이메일, 숫자 등의 단일 라인 데이터를 입력받는 필드입니다.
20
- *
21
- * {@link TextInput}은 가장 기본적인 폼 입력 요소로, label, placeholder, 에러 메시지,
22
- * helper 텍스트, 글자 수 카운터 등을 통합적으로 제공합니다. 일관된 스타일과 동작으로
23
- * 사용자 경험을 향상시킵니다.
24
- *
25
- * ## When (언제 사용해야 하는가)
26
- *
27
- * **사용해야 하는 경우:**
28
- * - **단일 라인 텍스트 입력**: 이름, 이메일, 전화번호 등 한 줄로 입력 가능한 정보
29
- * - **특정 타입 입력**: email, password, number, date 등 HTML input type을 활용
30
- * - **글자 수 제한**: 최대 글자 수를 지정하고 실시간으로 카운터를 표시
31
- * - **유효성 검증**: 에러 상태와 메시지를 통해 사용자에게 피드백 제공
32
- * - **필수 입력**: `required` 속성을 사용하여 반드시 입력해야 함을 시각적으로 안내
33
- *
34
- * ## Layout behavior
35
- *
36
- * TextInput은 기본적으로 부모 요소의 전체 너비(`fullWidth={true}`)를 차지합니다.
37
- * `fullWidth={false}`로 설정하면 내용에 맞춰 자동으로 조절됩니다.
38
- *
39
- * 레이블 배치는 `labelLayout` prop으로 제어됩니다:
40
- * - **vertical** (기본값): Label이 입력 필드 위에 세로로 배치됩니다.
41
- * - **horizontal**: Label과 입력 필드가 가로로 나란히 배치됩니다. `labelWidth`로 Label 너비를 조정할 수 있습니다 (기본값: 120px).
42
- *
43
- * 구조는 다음 순서로 배치됩니다:
44
- * 1. **헤더 영역** (있는 경우): label (좌측, 필수 시 * 표시) + 글자 수 카운터 (우측)
45
- * 2. **입력 필드**: 텍스트 입력 영역
46
- * 3. **메시지 영역** (있는 경우): errorMessage 또는 helperText
47
- *
48
- * 높이는 `h-10` (2.5rem / 40px)로 고정되어 일관된 버튼 높이와 정렬됩니다.
49
- *
50
- * ## Usage guidelines
51
- *
52
- * ### ✅ Do (권장 사항)
53
- *
54
- * - **명확한 label 제공**: 무엇을 입력해야 하는지 명확하게 표시하세요
55
- * - **필수 여부 명시**: 반드시 입력해야 하는 필드라면 `required` 속성을 활성화하세요.
56
- * - **가로 배치 활용**: 폼에서 여러 입력 필드를 정렬할 때는 `labelLayout="horizontal"`을 사용하여 일관된 레이아웃을 유지하세요.
57
- *
58
- * ## Example
59
- *
60
- * {@tool snippet}
61
- * 레이블과 필수 표시가 포함된 입력 필드:
62
- *
63
- * ```tsx
64
- * <TextInput
65
- * label="사용자 아이디"
66
- * required={true}
67
- * placeholder="아이디를 입력하세요"
68
- * />
69
- * ```
70
- * {@end-tool}
71
- *
72
- * {@tool snippet}
73
- * 가로 배치 레이아웃:
74
- *
75
- * ```tsx
76
- * <TextInput
77
- * label="상호(법인명)"
78
- * required={true}
79
- * labelLayout="horizontal"
80
- * labelWidth="150px"
81
- * placeholder="회사명을 입력하세요"
82
- * />
83
- * ```
84
- * {@end-tool}
85
- *
86
- * See also:
87
- *
88
- * - {@link Textarea}, 여러 줄 텍스트 입력을 위한 컴포넌트
89
- * - {@link TagInput}, 여러 태그를 입력받는 컴포넌트
90
- * - {@link DatePicker}, 날짜 선택을 위한 컴포넌트
91
- * - {@link Dropdown}, 옵션 선택을 위한 컴포넌트
92
- */
93
- export declare const TextInput: React.ForwardRefExoticComponent<TextInputProps & React.RefAttributes<HTMLInputElement>>;
94
- export {};
@@ -1,2 +0,0 @@
1
- export { TextInput } from './TextInput';
2
- export type { TextInputProps } from './TextInput';