@idbrnd/design-system 1.2.2 → 1.3.0

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.
@@ -0,0 +1,3 @@
1
+ import type { DropdownProps } from './Dropdown.types';
2
+ declare function Dropdown({ children, type, align, content, options, onSelect, selectedValue, textColor, customStyle, disabled, width, }: DropdownProps): import("react/jsx-runtime").JSX.Element;
3
+ export default Dropdown;
@@ -0,0 +1,76 @@
1
+ import type { CSSProperties, ReactNode } from "react";
2
+ export type DropdownType = "basic" | "search";
3
+ export type DropdownAlign = "left" | "center";
4
+ export interface DropdownOption {
5
+ /** 옵션에 표시되는 텍스트 */
6
+ label: string;
7
+ /** 옵션의 고유 식별 값 */
8
+ value: string;
9
+ /** 옵션 라벨 좌측에 표시할 아이콘. `content={true}`일 때만 렌더링됩니다. */
10
+ icon?: ReactNode;
11
+ }
12
+ export interface DropdownProps {
13
+ /** 드롭다운 트리거 엘리먼트.
14
+ * - 클릭 시 드롭다운 목록이 열리고 닫힙니다.
15
+ * - 버튼, 텍스트, 아이콘 등 자유롭게 전달할 수 있습니다.
16
+ * @example
17
+ * ```tsx
18
+ * <Dropdown options={options} onSelect={handleSelect}>
19
+ * <button>메뉴 열기</button>
20
+ * </Dropdown>
21
+ * ```
22
+ */
23
+ children: ReactNode;
24
+ /** 드롭다운 목록의 형태.
25
+ * - `basic`: 일반 목록형 (기본값)
26
+ * - `search`: 상단에 검색 입력란이 포함된 형태. 입력 시 옵션이 실시간 필터링됩니다.
27
+ * @defaultValue `'basic'`
28
+ */
29
+ type?: DropdownType;
30
+ /** 옵션 항목의 텍스트 정렬 방향.
31
+ * - `left`: 좌측 정렬 (기본값)
32
+ * - `center`: 중앙 정렬. 아이콘이 있는 경우 아이콘은 좌측, 라벨은 중앙 정렬됩니다.
33
+ * @defaultValue `'left'`
34
+ */
35
+ align?: DropdownAlign;
36
+ /** 옵션 항목에 아이콘 영역을 표시할지 여부.
37
+ * - `false`: 아이콘 영역 미표시 (기본값)
38
+ * - `true`: 각 옵션의 `icon` 값이 존재하면 라벨 좌측에 아이콘을 표시
39
+ * @defaultValue `false`
40
+ */
41
+ content?: boolean;
42
+ /** 드롭다운에 표시할 옵션 아이템 배열.
43
+ * 각 아이템은 `{ label, value, icon? }` 형태입니다.
44
+ */
45
+ options: DropdownOption[];
46
+ /** 옵션 항목 선택 시 호출되는 콜백.
47
+ * 선택된 `DropdownOption` 객체가 인자로 전달됩니다.
48
+ */
49
+ onSelect: (option: DropdownOption) => void;
50
+ /** 현재 선택된 옵션의 `value`.
51
+ * - 일치하는 항목에 선택 스타일과 `aria-selected`가 적용됩니다.
52
+ * - 미지정 시 선택 상태 없음
53
+ */
54
+ selectedValue?: string;
55
+ /** 옵션 라벨의 텍스트 색상을 커스터마이징합니다.
56
+ * - 미지정 시 기본 텍스트 색상(`inherit`) 사용
57
+ * - CSS 색상 문자열을 전달합니다. (예: `'#6366f1'`, `'red'`)
58
+ */
59
+ textColor?: string;
60
+ /** 루트 엘리먼트 인라인 스타일. (`style` prop 대신 사용)
61
+ * - 커스텀 해야 할 스타일이 있을 때 사용
62
+ * - 컴포넌트 너비 설정 시 px이 아닌 다른 단위를 사용해야 한다면, 이 속성 사용 권장
63
+ */
64
+ customStyle?: CSSProperties;
65
+ /** 비활성화 여부.
66
+ * - `false`: 트리거 클릭 시 드롭다운 열림 (기본값)
67
+ * - `true`: 트리거 클릭이 무시되고 드롭다운이 열리지 않음
68
+ * @defaultValue `false`
69
+ */
70
+ disabled?: boolean;
71
+ /** 드롭다운 목록의 너비. (단위: px)
72
+ * - 미지정 시 트리거 엘리먼트의 너비에 맞춤 (기본값)
73
+ * - 숫자 전달 시 고정 너비 적용
74
+ */
75
+ width?: number;
76
+ }
@@ -0,0 +1,3 @@
1
+ import type { DropdownMenuProps } from './DropdownMenu.types';
2
+ declare function DropdownMenu({ listboxId, type, align, content, options, selectedValue, onSelect, textColor, closing, }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
3
+ export default DropdownMenu;
@@ -0,0 +1,50 @@
1
+ import type { DropdownOption } from "./Dropdown.types";
2
+ export type DropdownMenuType = "basic" | "search";
3
+ export type DropdownMenuAlign = "left" | "center";
4
+ export interface DropdownMenuProps {
5
+ /** `<ul>` 엘리먼트의 id. 트리거의 `aria-controls`와 연결됩니다.
6
+ * - 미지정 시 id 속성 생략
7
+ */
8
+ listboxId?: string;
9
+ /** 드롭다운 목록의 형태.
10
+ * - `basic`: 일반 목록형 (기본값)
11
+ * - `search`: 상단에 검색 입력란이 포함된 형태. 입력 시 옵션이 실시간 필터링됩니다.
12
+ * @defaultValue `'basic'`
13
+ */
14
+ type?: DropdownMenuType;
15
+ /** 옵션 항목의 텍스트 정렬 방향.
16
+ * - `left`: 좌측 정렬 (기본값)
17
+ * - `center`: 중앙 정렬. 아이콘이 있는 경우 아이콘은 좌측, 라벨은 중앙 정렬됩니다.
18
+ * @defaultValue `'left'`
19
+ */
20
+ align?: DropdownMenuAlign;
21
+ /** 옵션 항목에 아이콘 영역을 표시할지 여부.
22
+ * - `false`: 아이콘 영역 미표시 (기본값)
23
+ * - `true`: 각 옵션의 `icon` 값이 존재하면 라벨 좌측에 아이콘을 표시
24
+ * @defaultValue `false`
25
+ */
26
+ content?: boolean;
27
+ /** 드롭다운에 표시할 옵션 아이템 배열.
28
+ * 각 아이템은 `{ label, value, icon? }` 형태입니다.
29
+ */
30
+ options: DropdownOption[];
31
+ /** 현재 선택된 옵션의 `value`.
32
+ * - 일치하는 항목에 선택 스타일(`selectedItem`)과 `aria-selected`가 적용됩니다.
33
+ * - 미지정 시 선택 상태 없음
34
+ */
35
+ selectedValue?: string;
36
+ /** 옵션 항목 선택 시 호출되는 콜백.
37
+ * 선택된 `DropdownOption` 객체가 인자로 전달됩니다.
38
+ */
39
+ onSelect: (option: DropdownOption) => void;
40
+ /** 옵션 라벨의 텍스트 색상을 커스터마이징합니다.
41
+ * - 미지정 시 기본 텍스트 색상(`inherit`) 사용
42
+ * - CSS 색상 문자열을 전달합니다. (예: `'#6366f1'`, `'red'`)
43
+ */
44
+ textColor?: string;
45
+ /** 닫힘 애니메이션 진행 중 여부. (내부 전용)
46
+ * - `true`일 때 퇴장 애니메이션이 재생됩니다.
47
+ * @defaultValue `false`
48
+ */
49
+ closing?: boolean;
50
+ }
@@ -0,0 +1,4 @@
1
+ import type { SelectProps } from './Select.types';
2
+ export type { SelectAlign, SelectProps, SelectSize, SelectType, SelectVariant, } from './Select.types';
3
+ declare function Select({ variant, size, heading, required, leadingContent, description, disabled, placeholder, value, onSelect, options, type, align, content, width, customStyle, textColor, }: SelectProps): import("react/jsx-runtime").JSX.Element;
4
+ export default Select;
@@ -0,0 +1,80 @@
1
+ import type { CSSProperties, ReactNode } from "react";
2
+ import type { DropdownOption } from "../Dropdown/Dropdown.types";
3
+ export type SelectVariant = "default" | "choosing" | "error" | "selected";
4
+ export type SelectSize = "large" | "medium" | "small";
5
+ export type SelectType = "basic" | "search";
6
+ export type SelectAlign = "left" | "center";
7
+ export interface SelectProps {
8
+ /** 트리거 박스 상태.
9
+ * - `default`: 기본 상태 (기본값)
10
+ * - `choosing`: 선택 중인 상태 (자동 적용)
11
+ * - `error`: 에러 상태 (자동 적용)
12
+ * - `selected`: 선택 완료 상태 (자동 적용)
13
+ */
14
+ variant?: SelectVariant;
15
+ /** 높이.
16
+ * - `large`: 44px | `medium`: 40px | `small`: 36px (기본값)
17
+ */
18
+ size?: SelectSize;
19
+ /** 상단 라벨 텍스트.
20
+ * - 라벨 텍스트 없으면 라벨 미표시 (기본값)
21
+ */
22
+ heading?: string;
23
+ /** 라벨 우측 `*` 표시할지 여부
24
+ * - `false`: 라벨 우측 `*` 미표시 (기본값)
25
+ * - `true`: 라벨 우측 `*` 표시
26
+ */
27
+ required?: boolean;
28
+ /** 텍스트 좌측에 표시할 아이콘 등의 컨텐츠.
29
+ * - 컨텐츠 없으면 미표시 (기본값)
30
+ */
31
+ leadingContent?: ReactNode;
32
+ /** 하단 안내 문구.
33
+ * - 안내 문구 없으면 미표시 (기본값)
34
+ */
35
+ description?: ReactNode;
36
+ /** 비활성화 여부.
37
+ * - `false`: 비활성화 아님 (기본값)
38
+ * - `true`: 비활성화
39
+ */
40
+ disabled?: boolean;
41
+ /** 플레이스홀더 텍스트.
42
+ * - 플레이스홀더 텍스트 없으면 미표시 (기본값)
43
+ */
44
+ placeholder?: string;
45
+ /** 현재 선택된 옵션. */
46
+ value?: DropdownOption | null;
47
+ /** 옵션 선택 시 콜백. */
48
+ onSelect?: (option: DropdownOption) => void;
49
+ /** 드롭다운 옵션 목록. (기본값: 빈 배열) */
50
+ options?: DropdownOption[];
51
+ /** 드롭다운 형태.
52
+ * - `basic`: 일반 목록형 (기본값)
53
+ * - `search`: 상단에 검색바가 포함된 형태
54
+ */
55
+ type?: SelectType;
56
+ /** 옵션 텍스트 정렬.
57
+ * - `left`: 좌측 정렬 (기본값)
58
+ * - `center`: 중앙 정렬
59
+ */
60
+ align?: SelectAlign;
61
+ /** 옵션에 아이콘 영역을 표시할지 여부.
62
+ * - `false`: 아이콘 영역을 미표시 (기본값)
63
+ * - `true`: 아이콘 영역을 표시
64
+ */
65
+ content?: boolean;
66
+ /** 컴포넌트 너비. (단위: px)
67
+ * - 미지정 시 부모 컨테이너 width: 100% (유동형) (기본값)
68
+ * - 숫자 전달 시 고정 너비 적용
69
+ */
70
+ width?: number;
71
+ /** 루트 엘리먼트 인라인 스타일 (`style` prop 대신 사용)
72
+ * - 커스텀 해야 할 스타일이 있을 때 사용
73
+ * - 컴포넌트 너비 설정 시 px이 아닌 다른 속성을 사용해야 한다면, 이 속성 사용 권장
74
+ */
75
+ customStyle?: CSSProperties;
76
+ /** 리스트 항목 텍스트 색상 커스터마이징.
77
+ * - 미지정 시 기본 텍스트 색상 사용
78
+ */
79
+ textColor?: string;
80
+ }
package/dist/index.d.ts CHANGED
@@ -36,3 +36,7 @@ export { default as ContentBadge } from "./components/Content/ContentBadge/Conte
36
36
  export type { ContentBadgeProps, ContentBadgeVariant, ContentBadgeSize, } from "./components/Content/ContentBadge/ContentBadge";
37
37
  export { default as StateBadge } from "./components/Content/StateBadge/StateBadge";
38
38
  export type { StateBadgeProps, StateBadgeVariant, StateBadgeSize, } from "./components/Content/StateBadge/StateBadge";
39
+ export { default as Select } from "./components/Select/Select";
40
+ export type { SelectProps, SelectVariant, SelectSize, SelectType, SelectAlign, } from "./components/Select/Select";
41
+ export { default as Dropdown } from "./components/Dropdown/Dropdown";
42
+ export type { DropdownProps, DropdownType, DropdownAlign, DropdownOption, } from "./components/Dropdown/Dropdown.types";