@croquiscom/pds 16.57.0 → 16.57.1
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.
- package/package.json +1 -1
- package/pds-skills/SKILL.md +5 -3
- package/pds-skills/resources/components/component-banner.props.txt +1 -1
- package/pds-skills/resources/components/component-button-accordionbutton.props.txt +2 -2
- package/pds-skills/resources/components/component-button-button.props.txt +2 -2
- package/pds-skills/resources/components/component-button-iconbutton.props.txt +2 -2
- package/pds-skills/resources/components/component-button-popoverbutton.props.txt +2 -2
- package/pds-skills/resources/components/component-button-textbutton.props.txt +1 -1
- package/pds-skills/resources/components/component-chip-inputchip.props.txt +1 -1
- package/pds-skills/resources/components/component-chipinput.props.txt +1 -1
- package/pds-skills/resources/components/component-colorpicker.props.txt +1 -1
- package/pds-skills/resources/components/component-control-radio.props.txt +1 -1
- package/pds-skills/resources/components/component-control-radiogroup-boxradio.props.txt +1 -1
- package/pds-skills/resources/components/component-control-radiogroup-radio.props.txt +1 -1
- package/pds-skills/resources/components/component-control-segmentedcontrol.props.txt +1 -1
- package/pds-skills/resources/components/component-datepickerv2-datepickerv2.props.txt +1 -1
- package/pds-skills/resources/components/component-dropdown.props.txt +1 -1
- package/pds-skills/resources/components/component-dropdownfilter.props.txt +2 -2
- package/pds-skills/resources/components/component-dropdowninput.props.txt +3 -3
- package/pds-skills/resources/components/component-dropdownmultiselect.props.txt +3 -3
- package/pds-skills/resources/components/component-input.props.txt +1 -1
- package/pds-skills/resources/components/component-inputstepper.props.txt +1 -1
- package/pds-skills/resources/components/component-modal-alertmodal.props.txt +1 -1
- package/pds-skills/resources/components/component-modal-basicmodal.props.txt +2 -2
- package/pds-skills/resources/components/component-modal-confirmmodal.props.txt +4 -4
- package/pds-skills/resources/components/component-modal-floatingmodal.props.txt +2 -2
- package/pds-skills/resources/components/component-numericinput.props.txt +2 -2
- package/pds-skills/resources/components/component-textarea.props.txt +1 -1
- package/pds-skills/resources/components/component-timepicker.props.txt +1 -1
- package/pds-skills/resources/components/component-timerangepicker.props.txt +4 -4
- package/pds-skills/resources/components/component-upload-fileuploadbutton.props.txt +1 -1
- package/pds-skills/resources/components/guide-component-decision-tree.txt +84 -0
- package/pds-skills/resources/components/guide-composition-patterns.txt +537 -0
- package/pds-skills/resources/components/intro.txt +1 -1
- package/pds-skills/resources/guides/guide-component-decision-tree.md +84 -0
- package/pds-skills/resources/guides/guide-composition-patterns.md +537 -0
- package/pds-skills/resources/index.txt +2 -0
package/package.json
CHANGED
package/pds-skills/SKILL.md
CHANGED
|
@@ -184,6 +184,8 @@ import { semantic_colors, spacing, shapes } from '@croquiscom/pds';
|
|
|
184
184
|
|
|
185
185
|
### 가이드 문서 (`resources/guides/`)
|
|
186
186
|
- `guide-common-mistakes.md`: 흔한 실수 (Common Mistakes)
|
|
187
|
+
- `guide-component-decision-tree.md`: Component Decision Tree
|
|
188
|
+
- `guide-composition-patterns.md`: PDS 합성 패턴 가이드
|
|
187
189
|
- `guide-foundation-usage.md`: Foundation 토큰 사용법
|
|
188
190
|
- `guide-getting-started.md`: 시작하기
|
|
189
191
|
- `guide-icon-mapping.md`: 아이콘 매핑 및 사용 가이드
|
|
@@ -192,7 +194,7 @@ import { semantic_colors, spacing, shapes } from '@croquiscom/pds';
|
|
|
192
194
|
|
|
193
195
|
### 컴포넌트 레퍼런스 (`resources/components/`)
|
|
194
196
|
|
|
195
|
-
**인덱스**: `resources/index.txt` - 전체 컴포넌트 목록 (
|
|
197
|
+
**인덱스**: `resources/index.txt` - 전체 컴포넌트 목록 (107개)
|
|
196
198
|
|
|
197
199
|
**파일 패턴** (Quick Reference의 "리소스" 컬럼 참조):
|
|
198
200
|
- `{리소스}.props.txt` — Tier 1: Props 상세 (타입, 기본값, 설명)
|
|
@@ -213,5 +215,5 @@ import { semantic_colors, spacing, shapes } from '@croquiscom/pds';
|
|
|
213
215
|
|
|
214
216
|
---
|
|
215
217
|
|
|
216
|
-
**문서 버전**: v16.57.
|
|
217
|
-
**마지막 업데이트**: 2026-05-
|
|
218
|
+
**문서 버전**: v16.57.1
|
|
219
|
+
**마지막 업데이트**: 2026-05-26
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
8
|
| `className` | `string | undefined` | No | | |
|
|
9
9
|
| `kind` | `undefined "neutral" "info" "error" "warning" "success"` | No | info | |
|
|
10
|
-
| `size` | `undefined "
|
|
10
|
+
| `size` | `undefined "xsmall" "small" "medium"` | No | medium | |
|
|
11
11
|
| `direction` | `undefined "horizontal" "vertical"` | No | horizontal | |
|
|
12
12
|
| `iconComponent` | `ComponentType<IconProps> | undefined` | No | | title 좌측에 렌더링 될 아이콘 요소 - title이 없을 경우 렌더되지 않습니다. - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 banner size 'medium'일경우 16, 'small'일경우 12로 고정됩니다. |
|
|
13
13
|
| `showIcon` | `boolean | undefined` | No | true | |
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
| Name | Type | Required | Default | Description |
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
|
-
| `size` | `undefined "
|
|
8
|
+
| `size` | `undefined "xsmall" "medium"` | No | medium | |
|
|
9
9
|
| `leftAddon` | `ReactNode` | No | | Label 좌측 렌더링될 Addon 요소 |
|
|
10
10
|
| `opened` | `boolean | undefined` | No | | Label 우측 화살표 오픈 상태 여부 |
|
|
11
11
|
| `fill` | `boolean | undefined` | No | false | 너비 100% 사용 여부 |
|
|
12
|
-
| `type` | `undefined "
|
|
12
|
+
| `type` | `undefined "button" "submit" "reset"` | No | button | |
|
|
13
13
|
| `asChild` | `boolean | undefined` | No | false | true로 설정 시, 기본 DOM 요소를 렌더링하지 않고 자식 컴포넌트에 props와 동작을 전달합니다. reference: https://www.radix-ui.com/primitives/docs/guides/composition |
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
8
|
| `fill` | `boolean | undefined` | No | | |
|
|
9
9
|
| `kind` | `undefined "primary" "secondary" "black" "negative" "outlined_primary" "outlined_secondary" "outlined_black" "outlined_negative"` | No | secondary | |
|
|
10
|
-
| `size` | `undefined "small" "medium" "large" "
|
|
10
|
+
| `size` | `undefined "xsmall" "small" "medium" "large" "xlarge" "xxlarge"` | No | medium | |
|
|
11
11
|
| `loading` | `boolean | undefined` | No | false | |
|
|
12
12
|
| `startIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 좌측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
13
13
|
| `endIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 우측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
14
14
|
| `asChild` | `boolean | undefined` | No | false | true로 설정 시, 기본 DOM 요소를 렌더링하지 않고 자식 컴포넌트에 props와 동작을 전달합니다. reference: https://www.radix-ui.com/primitives/docs/guides/composition |
|
|
15
|
-
| `type` | `undefined "
|
|
15
|
+
| `type` | `undefined "button" "submit" "reset"` | No | button | |
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
8
|
| `kind` | `undefined "outlined_primary" "outlined_secondary" "outlined_negative"` | No | outlined_secondary | shape 속성이 'circle'의 경우 적용되지 않습니다. |
|
|
9
9
|
| `icon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 없다면 currentColor가 지정됩니다. |
|
|
10
|
-
| `size` | `undefined "small" "medium" "large" "
|
|
10
|
+
| `size` | `undefined "xsmall" "small" "medium" "large" "xxsmall" "xlarge" "xxlarge"` | No | medium | |
|
|
11
11
|
| `shape` | `undefined "rectangle" "circle"` | No | rectangle | |
|
|
12
12
|
| `fill` | `boolean | undefined` | No | | |
|
|
13
|
-
| `type` | `undefined "
|
|
13
|
+
| `type` | `undefined "button" "submit" "reset"` | No | button | |
|
|
14
14
|
| `asChild` | `boolean | undefined` | No | false | true로 설정 시, 기본 DOM 요소를 렌더링하지 않고 자식 컴포넌트에 props와 동작을 전달합니다. reference: https://www.radix-ui.com/primitives/docs/guides/composition |
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
| Name | Type | Required | Default | Description |
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
8
|
| `useIconButton` | `boolean | undefined` | No | false | |
|
|
9
|
-
| `size` | `undefined "small" "medium" "large"
|
|
9
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'medium' | |
|
|
10
10
|
| `autoPlacement` | `boolean | undefined` | No | true | floating 요소가 reference 영역을 넘어갈 경우 자동 위치 처리 사용 유무 - 자동 위치 상/하만 적용됩니다. |
|
|
11
11
|
| `zIndex` | `number | undefined` | No | getZIndex('dropdown') | |
|
|
12
12
|
| `optionsMatchRefWidth` | `boolean | undefined` | No | false | |
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
| `fill` | `boolean | undefined` | No | | |
|
|
22
22
|
| `startIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 좌측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
23
23
|
| `endIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 우측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
24
|
+
| `type` | `undefined "button" "submit" "reset"` | No | 'button' | |
|
|
24
25
|
| `loading` | `boolean | undefined` | No | false | |
|
|
25
|
-
| `type` | `undefined "submit" "reset" "button"` | No | 'button' | |
|
|
26
26
|
| `asChild` | `boolean | undefined` | No | false | true로 설정 시, 기본 DOM 요소를 렌더링하지 않고 자식 컴포넌트에 props와 동작을 전달합니다. reference: https://www.radix-ui.com/primitives/docs/guides/composition |
|
|
27
27
|
| `unstableFocusVisible` | `boolean | undefined` | No | | react-aria useFocusRing isFocusVisible 반환값을 제어할 수 있습니다. |
|
|
@@ -16,5 +16,5 @@ semantic_colors.accent.primary | |
|
|
|
16
16
|
| `fill` | `boolean | undefined` | No | | |
|
|
17
17
|
| `startIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 좌측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
18
18
|
| `endIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 우측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
19
|
-
| `type` | `undefined "
|
|
19
|
+
| `type` | `undefined "button" "submit" "reset"` | No | button | |
|
|
20
20
|
| `asChild` | `boolean | undefined` | No | false | true로 설정 시, 기본 DOM 요소를 렌더링하지 않고 자식 컴포넌트에 props와 동작을 전달합니다. reference: https://www.radix-ui.com/primitives/docs/guides/composition |
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
| Name | Type | Required | Default | Description |
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
|
-
| `size` | `undefined "small" "medium" "large"
|
|
8
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | medium | |
|
|
9
9
|
| `canDelete` | `boolean | undefined` | No | true | |
|
|
10
10
|
| `onDelete` | `(() => void) | undefined` | No | | |
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
| `value` | `ChipInputValue[] | undefined` | No | | |
|
|
9
9
|
| `disabled` | `boolean | undefined` | No | | |
|
|
10
10
|
| `placeholder` | `string | undefined` | No | | |
|
|
11
|
-
| `size` | `undefined "small" "medium" "large"
|
|
11
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | medium | |
|
|
12
12
|
| `status` | `undefined "info" "error" "success"` | No | info | `error` 이외에 상태는 별도로 UI상 표시되지 않습니다. |
|
|
13
13
|
| `wrap` | `undefined "wrap" "nowrap"` | No | nowrap | 칩 목록은 한 줄로 제한하거나 개행되도록 할 수 있습니다. - `nowrap`: 칩이 인풋의 너비를 초과하면 수평으로 스크롤됩니다. - `wrap`: 칩이 인풋의 너비를 초과하면 수직으로 스크롤됩니다. |
|
|
14
14
|
| `width` | `number | undefined` | No | | |
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
| `value` | `string | undefined` | No | defaultValue || '' | hex color code (ex: #FFFFFF) |
|
|
10
10
|
| `onChange` | `(code: string) => void` | Yes | | @param code hex color code (ex: FFFFFF, #FFFFFF6D) |
|
|
11
11
|
| `disabled` | `boolean | undefined` | No | | |
|
|
12
|
-
| `size` | `undefined "
|
|
12
|
+
| `size` | `undefined "xsmall" "medium" "xxsmall"` | No | 'medium' | |
|
|
13
13
|
| `layout` | `undefined "preset" "custom"` | No | custom | preset props이 없으면 layout=preset이 적용되지 않습니다. |
|
|
14
14
|
| `alpha` | `boolean | undefined` | No | | |
|
|
15
15
|
| `hueOnly` | `boolean | undefined` | No | false | |
|
|
@@ -10,4 +10,4 @@
|
|
|
10
10
|
| `className` | `string | undefined` | No | | |
|
|
11
11
|
| `unstableFocusVisible` | `boolean | undefined` | No | | react-aria useFocusRing isFocusVisible 반환값을 제어할 수 있습니다. |
|
|
12
12
|
| `radioItemType` | `undefined "default" "box"` | No | default | |
|
|
13
|
-
| `size` | `undefined "small" "medium" "large"
|
|
13
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | medium | radioItemType - default일 경우 'small', 'medium', 'large'만 적용되며 default값은 'medium'입니다. radioItemType - box일 경우 'xsmall', 'medium', 'large'만 적용되며 default값은 'medium'입니다. |
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
| `keyExtractor` | `((item: RadioItem<RadioValue>, index: number) => string | number) | undefined` | No | | |
|
|
19
19
|
| `onChange` | `((value: RadioValue) => void) | undefined` | No | | |
|
|
20
20
|
| `unstableFocusVisible` | `boolean | undefined` | No | | react-aria useFocusRing isFocusVisible 반환값을 제어할 수 있습니다. |
|
|
21
|
-
| `size` | `undefined "small" "medium" "large"
|
|
21
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | | radioItemType - default일 경우 'small', 'medium', 'large'만 적용되며 default값은 'medium'입니다. radioItemType - box일 경우 'xsmall', 'medium', 'large'만 적용되며 default값은 'medium'입니다. |
|
|
22
22
|
| `ref` | `Ref<RadioGroupInstance<RadioValue>> | undefined` | No | | |
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
| `keyExtractor` | `((item: RadioItem<RadioValue>, index: number) => string | number) | undefined` | No | | |
|
|
19
19
|
| `onChange` | `((value: RadioValue) => void) | undefined` | No | | |
|
|
20
20
|
| `unstableFocusVisible` | `boolean | undefined` | No | | react-aria useFocusRing isFocusVisible 반환값을 제어할 수 있습니다. |
|
|
21
|
-
| `size` | `undefined "small" "medium" "large"
|
|
21
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | | radioItemType - default일 경우 'small', 'medium', 'large'만 적용되며 default값은 'medium'입니다. radioItemType - box일 경우 'xsmall', 'medium', 'large'만 적용되며 default값은 'medium'입니다. |
|
|
22
22
|
| `ref` | `Ref<RadioGroupInstance<RadioValue>> | undefined` | No | | |
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
| `className` | `string | undefined` | No | | |
|
|
9
9
|
| `defaultValue` | `string | undefined` | No | | |
|
|
10
10
|
| `value` | `string | undefined` | No | | |
|
|
11
|
-
| `size` | `undefined "
|
|
11
|
+
| `size` | `undefined "xsmall" "medium" "large"` | No | medium | |
|
|
12
12
|
| `items` | `SegmentedControlOptionType[]` | Yes | | |
|
|
13
13
|
| `width` | `undefined "fill" "auto"` | No | auto | |
|
|
14
14
|
| `disabled` | `boolean | undefined` | No | false | |
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
| `unit` | `undefined "month" "week" "day" "decade" "year" "minute" "second"` | No | day | 달력의 최소 시간 단위를 설정합니다. 시간을 선택하려면 "minute" 또는 "second"를 지정합니다. |
|
|
12
12
|
| `target` | `undefined "all" "from" "to"` | No | | 달력이 편집할 수 있는 항목을 지정합니다. - 지정하지 않으면 range 입력으로 구성되어 시작일, 종료일을 차례대로 선택할 수 있습니다. - "from"으로 지정하면 range 입력에서 시작일만 선택할 수 있고, 종료일은 비활성화됩니다. - "to"로 지정하면 range 입력에서 종료일만 선택할 수 있고, 시작일은 비활성화됩니다. - "all"로 지정하면 단일 날짜 선택으로 인식해서, 시작일/종료일을 모두 한 번에 선택합니다. |
|
|
13
13
|
| `width` | `CSSValueWithLength | undefined` | No | 100% | Input 너비를 지정할 수 있습니다. |
|
|
14
|
-
| `size` | `undefined "small" "medium" "large"
|
|
14
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | medium | Input size를 지정할 수 있습니다. |
|
|
15
15
|
| `error` | `boolean | undefined` | No | | Input의 에러 표시 여부를 지정합니다. |
|
|
16
16
|
| `disabled` | `boolean | undefined` | No | | |
|
|
17
17
|
| `className` | `string | undefined` | No | | |
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
10
10
|
| `maxHeight` | `number | undefined` | No | 400 | |
|
|
11
11
|
| `zIndex` | `number | undefined` | No | getZIndex('dropdown') | |
|
|
12
|
-
| `size` | `undefined "small" "medium" "large"
|
|
12
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'medium' | |
|
|
13
13
|
| `labelHeight` | `CSSValueWithLength | undefined` | No | | |
|
|
14
14
|
| `optionItemHeight` | `number | undefined` | No | | |
|
|
15
15
|
| `disabled` | `boolean | undefined` | No | | |
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
8
|
| `value` | `OptionValue[] | undefined` | No | | |
|
|
9
9
|
| `label` | `string` | Yes | | |
|
|
10
|
-
| `size` | `undefined "small" "medium" "large"
|
|
10
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'medium' | |
|
|
11
11
|
| `defaultValues` | `OptionValue[] | undefined` | No | [] | DropDownFilter 초기값 초기화시, DefaultValues가 있을 경우 DefaultValues를 사용하고, 없을 경우 빈 배열을 사용합니다. |
|
|
12
12
|
| `selectionGroup` | `DropdownFilterGroupOption<OptionValue>[] | undefined` | No | [] | 옵션을 selection 그룹으로 묶을때 사용합니다. selectionGroup이 있을 경우 options는 무시됩니다. |
|
|
13
13
|
| `options` | `DropdownFilterOption<OptionValue>[] | undefined` | No | [] | 각 옵션 값들은 라벨 앞 자동으로 체크박스가 생성되며, 선택된 옵션값은 체크박스로 표시됩니다. |
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
| `className` | `string | undefined` | No | | |
|
|
24
24
|
| `disabled` | `boolean | undefined` | No | | |
|
|
25
25
|
| `status` | `undefined "error"` | No | | |
|
|
26
|
-
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
27
26
|
| `zIndex` | `number | undefined` | No | getZIndex('dropdown') | |
|
|
28
27
|
| `autoPlacement` | `boolean | undefined` | No | true | floating 요소가 reference 영역을 넘어갈 경우 자동 위치 처리 사용 유무 - 자동 위치 상/하만 적용됩니다. |
|
|
29
28
|
| `maxHeight` | `number | undefined` | No | DEFAULT_DROPDOWN_MAX_HEIGHT | |
|
|
29
|
+
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
30
30
|
| `keyExtractor` | `((item: DropdownOption<OptionValue>, index: number) => string | number) | undefined` | No | | |
|
|
31
31
|
| `labelHeight` | `CSSValueWithLength | undefined` | No | | |
|
|
32
32
|
| `optionItemHeight` | `number | undefined` | No | | |
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
| `options` | `DropdownInputOption<OptionValue>[]` | Yes | | |
|
|
15
15
|
| `keyExtractor` | `((item: DropdownInputOption<OptionValue>, index: number) => string | number) | undefined` | No | | |
|
|
16
16
|
| `optionFilter` | `((inputValue: string, item: DropdownInputOption<OptionValue>, index: number) => boolean) | undefined` | No | | |
|
|
17
|
-
| `size` | `undefined "small" "medium" "large"
|
|
17
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'medium' | |
|
|
18
18
|
| `disabled` | `boolean | undefined` | No | | |
|
|
19
19
|
| `value` | `string | number | undefined` | No | | |
|
|
20
20
|
| `status` | `undefined "error"` | No | | |
|
|
21
|
-
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
22
21
|
| `zIndex` | `number | undefined` | No | getZIndex('dropdown') | |
|
|
23
|
-
| `placeholder` | `string | undefined` | No | | |
|
|
24
22
|
| `autoPlacement` | `boolean | undefined` | No | true | floating 요소가 reference 영역을 넘어갈 경우 자동 위치 처리 사용 유무 - 자동 위치 상/하만 적용됩니다. |
|
|
23
|
+
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
24
|
+
| `placeholder` | `string | undefined` | No | | |
|
|
25
25
|
| `optionItemHeight` | `number | undefined` | No | | |
|
|
26
26
|
| `enableVirtualScroll` | `boolean | undefined` | No | false | |
|
|
27
27
|
| `unstableFocusVisible` | `boolean | undefined` | No | | react-aria useFocusRing isFocusVisible 반환값을 제어할 수 있습니다. |
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
| `allCheck` | `boolean | undefined` | No | false | DropdownFilter Option들의 전체 선택 여부 |
|
|
12
12
|
| `onChange` | `((value: OptionValue[]) => void) | undefined` | No | | |
|
|
13
13
|
| `className` | `string | undefined` | No | | |
|
|
14
|
-
| `size` | `undefined "small" "medium" "large"
|
|
14
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'medium' | |
|
|
15
15
|
| `disabled` | `boolean | undefined` | No | | |
|
|
16
16
|
| `status` | `undefined "error"` | No | | |
|
|
17
|
-
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
18
17
|
| `zIndex` | `number | undefined` | No | getZIndex('dropdown') | |
|
|
19
|
-
| `placeholder` | `string | undefined` | No | | |
|
|
20
18
|
| `autoPlacement` | `boolean | undefined` | No | true | floating 요소가 reference 영역을 넘어갈 경우 자동 위치 처리 사용 유무 - 자동 위치 상/하만 적용됩니다. |
|
|
21
19
|
| `optionsMatchRefWidth` | `boolean | undefined` | No | true | |
|
|
20
|
+
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
21
|
+
| `placeholder` | `string | undefined` | No | | |
|
|
22
22
|
| `keyExtractor` | `((item: DropdownOption<OptionValue>, index: number) => string | number) | undefined` | No | | |
|
|
23
23
|
| `labelHeight` | `CSSValueWithLength | undefined` | No | | |
|
|
24
24
|
| `optionItemHeight` | `number | undefined` | No | | |
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
| Name | Type | Required | Default | Description |
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
|
-
| `size` | `undefined "small" "medium" "large"
|
|
8
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'medium'
|
|
9
9
|
'medium' | |
|
|
10
10
|
| `alignment` | `undefined "center" "left" "right"` | No | 'left' | |
|
|
11
11
|
| `status` | `undefined "info" "error" "success"` | No | info | |
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
| Name | Type | Required | Default | Description |
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
8
|
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
9
|
-
| `size` | `undefined "small" "medium" "large"
|
|
9
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | medium | |
|
|
10
10
|
| `status` | `undefined "info" "error"` | No | | min, max validation보다 우선합니다 |
|
|
11
11
|
| `onChange` | `((value: number | null, validValue?: number | undefined) => void) | undefined` | No | | |
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
| `className` | `string | undefined` | No | | |
|
|
20
20
|
| `fill` | `boolean | undefined` | No | false | |
|
|
21
21
|
| `opened` | `boolean | undefined` | No | | |
|
|
22
|
-
| `width` | `CSSValueWithLength | undefined` | No | 480 | Modal 너비를 지정할 수 있습니다. |
|
|
23
22
|
| `zIndex` | `number | undefined` | No | getZIndex('modal') | |
|
|
23
|
+
| `width` | `CSSValueWithLength | undefined` | No | 480 | Modal 너비를 지정할 수 있습니다. |
|
|
24
24
|
| `canClickOutside` | `boolean | undefined` | No | true | outside 영역 클릭시 닫힘 사용 여부 |
|
|
25
25
|
| `canCloseEscapeKey` | `boolean | undefined` | No | true | escapeKey 키이벤트 닫힘 사용 여부 |
|
|
26
26
|
| `returnFocus` | `boolean | undefined` | No | true | reference 요소로 포커스 반환 여부 |
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
|------|------|----------|---------|-------------|
|
|
49
49
|
| `fill` | `boolean | undefined` | No | | |
|
|
50
50
|
| `kind` | `undefined "primary" "secondary" "black" "negative" "outlined_primary" "outlined_secondary" "outlined_black" "outlined_negative"` | No | secondary | |
|
|
51
|
-
| `size` | `undefined "small" "medium" "large" "
|
|
51
|
+
| `size` | `undefined "xsmall" "small" "medium" "large" "xlarge" "xxlarge"` | No | medium | |
|
|
52
52
|
| `loading` | `boolean | undefined` | No | false | |
|
|
53
53
|
| `startIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 좌측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
54
54
|
| `endIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 우측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
55
55
|
| `asChild` | `boolean | undefined` | No | false | true로 설정 시, 기본 DOM 요소를 렌더링하지 않고 자식 컴포넌트에 props와 동작을 전달합니다. reference: https://www.radix-ui.com/primitives/docs/guides/composition |
|
|
56
|
-
| `type` | `undefined "
|
|
56
|
+
| `type` | `undefined "button" "submit" "reset"` | No | button | |
|
|
@@ -11,20 +11,20 @@
|
|
|
11
11
|
| `autoFocusButton` | `ModalActionButtonType | null | undefined` | No | 'confirm' | autofocus 지정할 기본 버튼 요소 |
|
|
12
12
|
| `className` | `string | undefined` | No | | |
|
|
13
13
|
| `kind` | `undefined "info" "error" "warning" "success"` | No | 'info' | |
|
|
14
|
-
| `fill` | `boolean | undefined` | No | false | |
|
|
15
14
|
| `title` | `ReactNode` | Yes | | |
|
|
16
15
|
| `onClose` | `(() => void | Promise<void>) | undefined` | No | | onConfirm/onCancel이 호출된 직후 onClose가 호출됩니다. |
|
|
16
|
+
| `fill` | `boolean | undefined` | No | false | |
|
|
17
17
|
| `opened` | `boolean | undefined` | No | | |
|
|
18
18
|
| `text` | `ReactNode` | No | | |
|
|
19
|
-
| `width` | `CSSValueWithLength | undefined` | No | 480 | Modal 너비를 지정할 수 있습니다. |
|
|
20
19
|
| `zIndex` | `number | undefined` | No | getZIndex('modal') | |
|
|
20
|
+
| `width` | `CSSValueWithLength | undefined` | No | 480 | Modal 너비를 지정할 수 있습니다. |
|
|
21
21
|
| `canClickOutside` | `boolean | undefined` | No | true | outside 영역 클릭시 닫힘 사용 여부 |
|
|
22
22
|
| `canCloseEscapeKey` | `boolean | undefined` | No | true | escapeKey 키이벤트 닫힘 사용 여부 |
|
|
23
23
|
| `returnFocus` | `boolean | undefined` | No | true | reference 요소로 포커스 반환 여부 |
|
|
24
24
|
| `onExited` | `(() => void) | undefined` | No | | Modal destroy시 전달합니다. |
|
|
25
|
-
| `
|
|
25
|
+
| `subtext` | `ReactNode` | No | | |
|
|
26
26
|
| `dense` | `boolean | undefined` | No | | |
|
|
27
|
+
| `confirmText` | `string | undefined` | No | | |
|
|
27
28
|
| `confirmButtonProps` | `ModalButtonProps | undefined` | No | | |
|
|
28
29
|
| `onConfirm` | `(() => void | Promise<void>) | undefined` | No | | confirmButton 클릭 이벤트 |
|
|
29
|
-
| `subtext` | `ReactNode` | No | | |
|
|
30
30
|
| `__floatingPortalId` | `string | undefined` | No | | @internal 내부 사용을 위한 floatingPortalId |
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
|------|------|----------|---------|-------------|
|
|
46
46
|
| `fill` | `boolean | undefined` | No | | |
|
|
47
47
|
| `kind` | `undefined "primary" "secondary" "black" "negative" "outlined_primary" "outlined_secondary" "outlined_black" "outlined_negative"` | No | secondary | |
|
|
48
|
-
| `size` | `undefined "small" "medium" "large" "
|
|
48
|
+
| `size` | `undefined "xsmall" "small" "medium" "large" "xlarge" "xxlarge"` | No | medium | |
|
|
49
49
|
| `loading` | `boolean | undefined` | No | false | |
|
|
50
50
|
| `startIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 좌측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
51
51
|
| `endIcon` | `ReactElement<IconProps, string | JSXElementConstructor<any>> | undefined` | No | | 버튼 우측 영역에 렌더링 될 아이콘 요소 - Icon 컴포넌트 color props가 있더라도 kind 따라 currentColor가 지정됩니다. - Icon 컴포넌트 size props가 있더라도 Icon 사이즈는 ButtonSize에 따라 고정됩니다. |
|
|
52
52
|
| `asChild` | `boolean | undefined` | No | false | true로 설정 시, 기본 DOM 요소를 렌더링하지 않고 자식 컴포넌트에 props와 동작을 전달합니다. reference: https://www.radix-ui.com/primitives/docs/guides/composition |
|
|
53
|
-
| `type` | `undefined "
|
|
53
|
+
| `type` | `undefined "button" "submit" "reset"` | No | button | |
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
| Name | Type | Required | Default | Description |
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
|
-
| `size` | `undefined "small" "medium" "large"
|
|
8
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'medium'
|
|
9
9
|
'medium' | |
|
|
10
|
-
| `leftAddon` | `string | undefined` | No | | Input prefix 요소 |
|
|
11
10
|
| `status` | `undefined "info" "error" "success"` | No | 'info' | |
|
|
11
|
+
| `leftAddon` | `string | undefined` | No | | Input prefix 요소 |
|
|
12
12
|
| `width` | `CSSValueWithLength | undefined` | No | | |
|
|
13
13
|
| `startElement` | `ReactNode | ReactElement<IconProps, string | JSXElementConstructor<any>>` | No | | 좌측 영역에 렌더링 될 요소 |
|
|
14
14
|
| `endElement` | `ReactNode | ReactElement<IconProps, string | JSXElementConstructor<any>>` | No | | 우측 영역에 렌더링 될 요소 |
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
| Name | Type | Required | Default | Description |
|
|
7
7
|
|------|------|----------|---------|-------------|
|
|
8
|
-
| `size` | `undefined "small" "medium" "large"
|
|
8
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | 'large' | |
|
|
9
9
|
| `error` | `boolean | undefined` | No | | |
|
|
10
10
|
| `showCounter` | `boolean | undefined` | No | false | 입력된 value count 노출 여부 |
|
|
11
11
|
| `autoSize` | `boolean | AutoSizeType | undefined` | No | false | 입혁하는 텍스트에 따라 자동으로 크기를 조절하며 최소/최대 라인수를 설정할 수 있습니다. - height 또는 textarea 기본 rows 속성이 있을 경우 적용되지 않습니다. - autoSize를 사용할 경우 기본 resize는 none처리됩니다. - minRows(최소 행 수)의 기본값은 2입니다. - maxRows(최대 행 수)를 넘어갈 경우 자동 내부 스크롤 처리됩니다. |
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| `readOnly` | `boolean | undefined` | No | false | |
|
|
14
14
|
| `disabledTime` | `((value: Date | null) => DisabledTimes) | undefined` | No | | |
|
|
15
15
|
| `fill` | `boolean | undefined` | No | false | TimePicker 팝오버 너비 100% 사용여부 - Input 요소 만큼의 100% 너비를 가집니다. - true 일 경우 footer(확인/취소) 버튼 속성은 자동 fill 처리됩니다. |
|
|
16
|
-
| `size` | `undefined "small" "medium" "large"
|
|
16
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | medium | |
|
|
17
17
|
| `value` | `Date | undefined` | No | | |
|
|
18
18
|
| `onClose` | `(() => void) | undefined` | No | | |
|
|
19
19
|
| `onOpen` | `(() => void) | undefined` | No | | |
|
|
@@ -9,16 +9,16 @@
|
|
|
9
9
|
| `onChange` | `((start: Date | null, end: Date | null) => void) | undefined` | No | | |
|
|
10
10
|
| `disabledTime` | `((value: Date | null, range?: "from" | "to" | undefined) => DisabledTimes) | undefined` | No | | |
|
|
11
11
|
| `className` | `string | undefined` | No | | |
|
|
12
|
-
| `fill` | `boolean | undefined` | No | false | TimePicker 팝오버 너비 100% 사용여부 - Input 요소 만큼의 100% 너비를 가집니다. - true 일 경우 footer(확인/취소) 버튼 속성은 자동 fill 처리됩니다. |
|
|
13
|
-
| `size` | `undefined "small" "medium" "large" "xsmall"` | No | medium | |
|
|
14
12
|
| `error` | `boolean | undefined` | No | | |
|
|
13
|
+
| `size` | `undefined "xsmall" "small" "medium" "large"` | No | medium | |
|
|
15
14
|
| `onClose` | `(() => void) | undefined` | No | | |
|
|
15
|
+
| `fill` | `boolean | undefined` | No | false | TimePicker 팝오버 너비 100% 사용여부 - Input 요소 만큼의 100% 너비를 가집니다. - true 일 경우 footer(확인/취소) 버튼 속성은 자동 fill 처리됩니다. |
|
|
16
16
|
| `disabled` | `boolean | undefined` | No | | |
|
|
17
|
-
| `width` | `CSSValueWithLength | undefined` | No | 100% | Input 너비를 지정할 수 있습니다. |
|
|
18
17
|
| `zIndex` | `number | undefined` | No | getZIndex('picker') | |
|
|
18
|
+
| `width` | `CSSValueWithLength | undefined` | No | 100% | Input 너비를 지정할 수 있습니다. |
|
|
19
19
|
| `readOnly` | `boolean | undefined` | No | false | |
|
|
20
|
-
| `showRemoveButton` | `boolean | undefined` | No | false | Input 우측에 값 지우기 버튼 표시 여부 true: 값이 있을 때 마우스 호버 시 지우기(X) 버튼 표시 false: 항상 시계 아이콘만 표시 값이 없을 때는 설정과 관계없이 시계 아이콘이 표시됩니다. |
|
|
21
20
|
| `onOpen` | `(() => void) | undefined` | No | | |
|
|
21
|
+
| `showRemoveButton` | `boolean | undefined` | No | false | Input 우측에 값 지우기 버튼 표시 여부 true: 값이 있을 때 마우스 호버 시 지우기(X) 버튼 표시 false: 항상 시계 아이콘만 표시 값이 없을 때는 설정과 관계없이 시계 아이콘이 표시됩니다. |
|
|
22
22
|
| `incrementMinute` | `number | undefined` | No | 1 | 지정된 배수 단위로 분 설정이 가능합니다. |
|
|
23
23
|
| `hideDisabledMinutes` | `boolean | undefined` | No | false | 비활성화된 분 항목을 목록에서 숨길지 여부 true: disabledMinutes로 비활성화된 분 항목이 목록에서 완전히 제거됩니다. false: 비활성화된 분 항목이 목록에 표시되지만 선택 불가능합니다. |
|
|
24
24
|
| `usePortal` | `boolean | undefined` | No | true | |
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
| `label` | `ReactNode` | Yes | '파일 업로드' | |
|
|
9
9
|
| `multiple` | `boolean | undefined` | No | false | |
|
|
10
10
|
| `loading` | `boolean | undefined` | No | | |
|
|
11
|
-
| `buttonProps` | `Omit<ButtonProps, "
|
|
11
|
+
| `buttonProps` | `Omit<ButtonProps, "disabled" | "onClick" | "loading"> | undefined` | No | | |
|
|
12
12
|
| `onFileUpload` | `((file: File | File[]) => void) | undefined` | No | | |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Component Decision Tree
|
|
2
|
+
|
|
3
|
+
유사한 역할의 PDS 컴포넌트 중 어느 것을 써야 하는지의 판단 기준을 모은 가이드. prop/API 비교가 아니라 **사용 상황과 의도** 기준으로 정리한다.
|
|
4
|
+
|
|
5
|
+
> 컴포넌트의 prop 정의·타입·기본값은 **Guide / Composition Patterns** 페이지와 각 컴포넌트의 `.props.txt`(Tier 1)를 참조하라. 본 가이드는 _어느 컴포넌트를 쓸지_만 다룬다.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 단일 선택 — `Radio` / `RadioGroup` / `BoxRadioGroup` / `SegmentedControl`
|
|
10
|
+
|
|
11
|
+
모두 단일 선택이지만 레이아웃 방향과 선택이 즉시 반영되느냐가 다르다. `Switch`는 on/off 이진 상태 전환이라 이 그룹과 목적이 달라 별도 취급한다.
|
|
12
|
+
|
|
13
|
+
| 판단 기준 | `Radio` / `RadioGroup` | `BoxRadioGroup` | `SegmentedControl` | | ----------------------- | ---------------------- | --------------- | ------------------- | | 레이아웃 방향 | 가로 / 세로 | 가로 / 그리드 | 가로 고정 | | 옵션 수 | 제한 없음 | 2~6개 권장 | 2~5개 | | 선택 결과 반영 시점 | 폼 제출 후 | 폼 제출 후 | 즉각 반영 (뷰 전환) | | 아이콘/이미지가 포함된 옵션 | 불가 | 불가 | 가능 | | 옵션 helper text | 가능 | 가능 | 불가 | | 주요 사용 위치 | 폼, 설정 | 필터, 옵션 선택 | 뷰 전환, 탭 대체 |
|
|
14
|
+
|
|
15
|
+
**선택 가이드**
|
|
16
|
+
|
|
17
|
+
- 폼 안에서 가로/세로 배치로 단일 선택 → `Radio` / `RadioGroup`
|
|
18
|
+
- 선택지를 카드형으로 시각 강조하거나 가로 배치 → `BoxRadioGroup`
|
|
19
|
+
- 선택 즉시 콘텐츠가 전환되어야 할 때 → `SegmentedControl`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. 탭 — `LineTabs` / `PanelTabs` / `BoxTabs`
|
|
24
|
+
|
|
25
|
+
탭 컴포넌트는 사용 위계와 시각적 강조 수준으로 구분한다.
|
|
26
|
+
|
|
27
|
+
| 판단 기준 | `LineTabs` | `PanelTabs` | `BoxTabs` | | ----------------- | ----------- | ----------- | ---------------------------- | | 사용 위계 | 페이지 레벨 | 섹션 레벨 | 섹션 레벨 | | 스타일 | 밑줄 | 패널 배경 | 박스형 배경 | | 상단 고정(sticky) | 가능 | 불가 | 불가 | | 탭 수 | 2~7개 | 2~8개 | 제한 없음 (사용자 추가 가능) |
|
|
28
|
+
|
|
29
|
+
**선택 가이드**
|
|
30
|
+
|
|
31
|
+
- 페이지 전체의 주요 네비게이션 → `LineTabs`
|
|
32
|
+
- 카드/패널 내부 콘텐츠 전환 → `PanelTabs`
|
|
33
|
+
- 탭 자체를 버튼처럼 강조해야 할 때, 또는 사용자가 직접 탭을 추가하는 경우 → `BoxTabs`
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 3. 보조 정보 표시 — `Tooltip` / `Popover`
|
|
38
|
+
|
|
39
|
+
두 컴포넌트 모두 hover와 click 트리거를 지원한다. 구분 기준은 트리거 방식이 아니라 **콘텐츠 복잡도**다.
|
|
40
|
+
|
|
41
|
+
| 판단 기준 | `Tooltip` | `Popover` | | ---------------------------- | -------------------------- | ------------------------- | | 트리거 | hover / click 모두 지원 | hover / click 모두 지원 | | 콘텐츠 타입 | 텍스트만 | 텍스트 + 복합 콘텐츠 가능 | | 내부 인터랙션 (버튼·링크 등) | 불가 | 가능 | | 레이아웃 옵션 | 단일 | short form / long form | | `kind` (의미적 변형) | neutral / accent / negative | — | | 모바일 사용 | 가능 | 가능 |
|
|
42
|
+
|
|
43
|
+
**선택 가이드**
|
|
44
|
+
|
|
45
|
+
- 짧은 텍스트 정보만 표시하고 내부 인터랙션이 필요 없을 때 → `Tooltip`
|
|
46
|
+
- 버튼·링크·복합 콘텐츠가 포함될 때 → `Popover`
|
|
47
|
+
- 모바일 환경에서 추가 정보가 필요하면 `Tooltip`보다 `Popover` 사용 (모바일은 hover가 안정적이지 않다)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 4. Modal 계열 — 유형 선택
|
|
52
|
+
|
|
53
|
+
PDS의 모달은 5개 유형으로 구성된다. 각 유형은 **사용 조건**으로 구분한다.
|
|
54
|
+
|
|
55
|
+
| 유형 | 컴포넌트 / 호출 | 주요 목적 | 버튼 구성 | | -------- | ------------------------------------------------------------ | ----------------------------------- | ----------- | | Alert | `await Alert(\{...\})` (`AlertModal` 함수형 호출) | 오류·경고 등 즉각 인지 필요 | 단일 확인 | | Confirm | `await Confirm(\{...\})` (`ConfirmModal` 함수형 호출) | 사용자 의사 결정 요청 | 취소 + 확인 | | Basic | `\<Modal opened=\{...\} onCancel=\{...\}\>` (JSX 직접) | 범용 콘텐츠 표시 | 상황에 따라 | | Notice | `\<NoticeModal opened=\{...\} onCancel=\{...\}\>` (JSX 직접) | 공지·프로모션 등 이미지가 포함된 콘텐츠 | 상황에 따라 | | Floating | `\<FloatingModal trigger=\{...\}\>` (JSX 직접, 트리거 기반) | 화면 일부 위에 떠있는 형태 | 상황에 따라 |
|
|
56
|
+
|
|
57
|
+
**유형 선택 가이드**
|
|
58
|
+
|
|
59
|
+
| 유형 | 사용 조건 | Do | Don't | | ------- | ---------------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------- | | Alert | 특정 행동의 결과를 알릴 때 | 필요한 최소한의 기능만 담는다. 오류는 `kind="error"` 사용 | "확인 / 닫기 / X" 같은 동일 기능 버튼 중복. title과 heading에 동일 정보 중복 | | Confirm | 행동에 대한 의사를 물어볼 때 | 필요한 최소한의 기능만 담는다 | "취소 / X" 동일 기능 버튼 중복. 불필요한 title 사용 | | Basic | 항목의 상세 내역을 보여줄 때 | contents area에 정보를 자유롭게 담되 정해진 스펙 안에서 | 정해진 스펙 외 임의 커스텀(X 버튼 제거 등) |
|
|
60
|
+
|
|
61
|
+
**`Modal` (Basic) 사이즈 가이드**
|
|
62
|
+
|
|
63
|
+
| 사이즈 | 너비 | 사용 시점 | | -------- | ------ | --------------------------------------------------- | | `xlarge` | 1280px | 좌우에 테이블이 2개 있는 등 확장된 형태가 필요할 때 | | `large` | 900px | 조회용 테이블이 있는 경우 | | `medium` | 720px | 달력·작은 테이블·이미지 등이 들어갈 때 | | `small` | 480px | 간단한 정보를 입력해야 할 때 | | `xsmall` | 375px | 모바일 미리보기를 보여줄 때 |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 5. Modal 계열 — 오버레이 유형 선택
|
|
68
|
+
|
|
69
|
+
같은 오버레이라도 `Modal` / `BottomSheet` / `Drawer`는 진입 방향과 플랫폼 맥락이 다르다.
|
|
70
|
+
|
|
71
|
+
| 판단 기준 | `Modal` | `BottomSheet` | `Drawer` | | ----------- | ------------------------------------------- | --------------------- | ---------------------- | | 주 플랫폼 | 웹 / 데스크톱 | 모바일 | 웹 / 데스크톱 | | 진입 방향 | 중앙 팝업 | 하단에서 위로 | 좌/우 측면 | | 주요 목적 | 확인 / 경고 / 정보 표시 | 추가 옵션 / 상세 정보 | 네비게이션 / 상세 패널 | | 콘텐츠 길이 | 짧음 권장 | 스크롤 가능 | 스크롤 가능 | | 변형 유형 | Alert / Confirm / Basic / Notice / Floating | regular / full | — | | Backdrop | 항상 | 항상 | 항상 |
|
|
72
|
+
|
|
73
|
+
**선택 가이드**
|
|
74
|
+
|
|
75
|
+
- 사용자의 즉각적인 확인/결정이 필요한 경우 → `Modal` (또는 함수형 `Alert()` / `Confirm()`)
|
|
76
|
+
- 모바일에서 하단으로 추가 정보나 옵션을 제공할 때 → `BottomSheet`
|
|
77
|
+
- 측면에서 슬라이드로 펼쳐 네비게이션이나 상세를 보여줄 때 → `Drawer`
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 참고 가이드
|
|
82
|
+
|
|
83
|
+
- 합성 패턴 (portal·slots·subcomponent 등): **Guide / Composition Patterns** 페이지
|
|
84
|
+
- prop 정의·타입·기본값: 각 컴포넌트의 `resources/components/component-\{slug\}.props.txt`
|