sellmate-design-system-react 9.0.0-beta.3 โ 9.0.0-beta.30
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/AGENTS.md +599 -94
- package/README.md +111 -9
- package/dist/components/SBadge/README.md +24 -0
- package/dist/components/SBadge/SBadge.d.ts +1 -1
- package/dist/components/SBarcodeInput/README.md +9 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +7 -1
- package/dist/components/SButton/README.md +36 -0
- package/dist/components/SCalendar/README.md +13 -0
- package/dist/components/SCallout/README.md +15 -0
- package/dist/components/SCard/README.md +16 -0
- package/dist/components/SCard/SCard.d.ts +17 -2
- package/dist/components/SCheckbox/README.md +8 -0
- package/dist/components/SChipFilter/README.md +326 -13
- package/dist/components/SChipFilter/SChipFilter.d.ts +137 -58
- package/dist/components/SChipFilter/index.d.ts +1 -1
- package/dist/components/SChipInput/README.md +15 -1
- package/dist/components/SChipInput/SChipInput.d.ts +7 -1
- package/dist/components/SChipInput/index.d.ts +1 -1
- package/dist/components/SCircleProgress/README.md +8 -0
- package/dist/components/SConfirmModal/README.md +17 -1
- package/dist/components/SConfirmModal/SConfirmModal.d.ts +2 -2
- package/dist/components/SConfirmModal/index.d.ts +1 -1
- package/dist/components/SDatePicker/README.md +57 -2
- package/dist/components/SDatePicker/SDatePicker.d.ts +57 -4
- package/dist/components/SDatePicker/index.d.ts +1 -1
- package/dist/components/SDateRangePicker/README.md +17 -2
- package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +16 -3
- package/dist/components/SDivider/README.md +5 -0
- package/dist/components/SDivider/SDivider.d.ts +11 -0
- package/dist/components/SDraggableItem/README.md +37 -0
- package/dist/components/SDraggableItem/SDraggableItem.d.ts +2 -0
- package/dist/components/SDraggableItem/index.d.ts +1 -1
- package/dist/components/SDraggableList/README.md +30 -0
- package/dist/components/SDraggableList/SDraggableList.d.ts +11 -0
- package/dist/components/SDraggableList/index.d.ts +1 -1
- package/dist/components/SDrawer/README.md +8 -0
- package/dist/components/SDropdownButton/README.md +19 -0
- package/dist/components/SEditor/EditorBody.d.ts +36 -0
- package/dist/components/SEditor/EditorToolbar.d.ts +93 -0
- package/dist/components/SEditor/README.md +203 -0
- package/dist/components/SEditor/SEditor.d.ts +114 -0
- package/dist/components/SEditor/editor-icons.d.ts +63 -0
- package/dist/components/SEditor/editor.config.d.ts +119 -0
- package/dist/components/SEditor/index.d.ts +8 -0
- package/dist/components/SEditor/tiptap-api.d.ts +29 -0
- package/dist/components/SEditor/use-is-mobile.d.ts +14 -0
- package/dist/components/SExpansionItem/README.md +36 -0
- package/dist/components/SExpansionItem/index.d.ts +1 -1
- package/dist/components/SField/README.md +27 -2
- package/dist/components/SField/SField.d.ts +22 -4
- package/dist/components/SFilePicker/README.md +15 -1
- package/dist/components/SFilePicker/SFilePicker.d.ts +7 -1
- package/dist/components/SFooter/README.md +25 -0
- package/dist/components/SFooter/SFooter.d.ts +4 -3
- package/dist/components/SForm/README.md +11 -0
- package/dist/components/SGhostButton/README.md +20 -4
- package/dist/components/SGnb/README.md +51 -0
- package/dist/components/SGnb/SGnb.d.ts +22 -0
- package/dist/components/SGnb/gnb.config.d.ts +7 -0
- package/dist/components/SGnb/index.d.ts +1 -1
- package/dist/components/SGnbSystem/README.md +121 -0
- package/dist/components/SGnbSystem/SGnbSystem.d.ts +93 -0
- package/dist/components/SGnbSystem/gnbSystem.config.d.ts +89 -0
- package/dist/components/SGnbSystem/index.d.ts +2 -0
- package/dist/components/SGuide/README.md +15 -0
- package/dist/components/SIcon/README.md +8 -0
- package/dist/components/SIcon/SIcon.d.ts +1 -1
- package/dist/components/SIcon/icons.gen.d.ts +2 -0
- package/dist/components/SImage/README.md +14 -0
- package/dist/components/SInput/README.md +3 -1
- package/dist/components/SInput/SInput.d.ts +7 -1
- package/dist/components/SKeyValueTable/README.md +87 -0
- package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +14 -3
- package/dist/components/SKeyValueTable/index.d.ts +1 -1
- package/dist/components/SLayout/README.md +16 -0
- package/dist/components/SLayout/index.d.ts +1 -1
- package/dist/components/SLinearProgress/README.md +15 -0
- package/dist/components/SLinearProgress/SLinearProgress.d.ts +3 -0
- package/dist/components/SLinearProgress/index.d.ts +1 -1
- package/dist/components/SList/README.md +5 -1
- package/dist/components/SList/SList.d.ts +0 -2
- package/dist/components/SListItem/README.md +41 -0
- package/dist/components/SListItem/index.d.ts +1 -1
- package/dist/components/SLoadingModal/README.md +9 -1
- package/dist/components/SLoadingModal/SLoadingModal.d.ts +2 -2
- package/dist/components/SLoadingModal/index.d.ts +1 -1
- package/dist/components/SNumberInput/README.md +9 -1
- package/dist/components/SNumberInput/SNumberInput.d.ts +7 -1
- package/dist/components/SPage/README.md +41 -1
- package/dist/components/SPage/SPage.d.ts +24 -2
- package/dist/components/SPage/index.d.ts +1 -1
- package/dist/components/SPage/page.config.d.ts +8 -0
- package/dist/components/SPopover/README.md +15 -0
- package/dist/components/SPopup/README.md +19 -0
- package/dist/components/SPortal/README.md +14 -0
- package/dist/components/SRadio/README.md +20 -0
- package/dist/components/SRadioButton/README.md +18 -0
- package/dist/components/SRadioButton/SRadioButton.d.ts +1 -1
- package/dist/components/SRadioCard/README.md +78 -0
- package/dist/components/SRadioCard/SRadioCard.d.ts +29 -0
- package/dist/components/SRadioCard/SRadioCardGroup.d.ts +36 -0
- package/dist/components/SRadioCard/index.d.ts +2 -0
- package/dist/components/SScrollArea/README.md +14 -0
- package/dist/components/SSearchInput/README.md +63 -0
- package/dist/components/SSearchInput/SSearchInput.d.ts +52 -0
- package/dist/components/SSearchInput/index.d.ts +1 -0
- package/dist/components/SSectionHeaderCard/README.md +44 -20
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +31 -14
- package/dist/components/SSectionHeaderCard/index.d.ts +1 -1
- package/dist/components/SSelect/README.md +24 -4
- package/dist/components/SSelect/SSelect.d.ts +14 -2
- package/dist/components/SSplitter/README.md +15 -0
- package/dist/components/SStepper/README.md +26 -0
- package/dist/components/SSwitch/README.md +13 -0
- package/dist/components/SSystemActionButton/README.md +134 -0
- package/dist/components/SSystemActionButton/SSystemActionButton.d.ts +79 -0
- package/dist/components/SSystemActionButton/index.d.ts +2 -0
- package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +87 -0
- package/dist/components/STable/README.md +87 -1
- package/dist/components/STable/STable.d.ts +141 -11
- package/dist/components/STable/index.d.ts +1 -1
- package/dist/components/STabs/README.md +12 -1
- package/dist/components/STabs/STabs.d.ts +2 -4
- package/dist/components/STabs/index.d.ts +1 -1
- package/dist/components/STabs/tabs.config.d.ts +3 -4
- package/dist/components/STag/README.md +52 -0
- package/dist/components/STag/STag.d.ts +3 -1
- package/dist/components/STextLink/README.md +17 -0
- package/dist/components/STextLink/STextLink.d.ts +2 -0
- package/dist/components/STextarea/README.md +1 -1
- package/dist/components/STextarea/STextarea.d.ts +7 -1
- package/dist/components/STimePicker/README.md +15 -1
- package/dist/components/STimePicker/STimePicker.d.ts +7 -1
- package/dist/components/STimePicker/timepicker.config.d.ts +7 -0
- package/dist/components/STimeRangePicker/README.md +27 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +7 -1
- package/dist/components/SToast/README.md +24 -0
- package/dist/components/SToggle/README.md +8 -0
- package/dist/components/SToggle/index.d.ts +1 -1
- package/dist/components/STooltip/README.md +22 -0
- package/dist/components/STree/README.md +41 -0
- package/dist/components/STree/STree.d.ts +8 -0
- package/dist/components/STree/index.d.ts +1 -1
- package/dist/index.cjs +5483 -1150
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +5458 -1149
- package/dist/index.js.map +1 -1
- package/dist/lib/field-width.d.ts +31 -0
- package/dist/lib/floating-height.d.ts +15 -0
- package/dist/lib/story-docs.d.ts +19 -3
- package/dist/lib/truncated-value-tooltip.d.ts +18 -0
- package/dist/llms-full.txt +2813 -193
- package/dist/llms.txt +604 -96
- package/dist/styles.css +1249 -135
- package/dist/theme.css +142 -16
- package/eslint/index.mjs +14 -0
- package/eslint/lib/table-column.mjs +26 -0
- package/eslint/rules/divider-vertical-height.mjs +137 -0
- package/eslint/rules/field-width-grade.d.mts +41 -0
- package/eslint/rules/field-width-grade.mjs +311 -0
- package/eslint/rules/table-column-width.mjs +110 -0
- package/eslint/scale.gen.mjs +5 -2
- package/package.json +11 -1
package/AGENTS.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **๋์**: ์ด ํจํค์ง๋ก ํ๋ฉด์ ๋ง๋๋ ์๋น ์ฑ์ ๊ฐ๋ฐ์์ AI ์ฝ๋ฉ ์์ด์ ํธ(Claude ๋ฑ).
|
|
4
4
|
> ์ด ๋ฌธ์๋ "๋ฌด์์ ์ธ์ ์ฐ๊ณ , ๋ฌด์์ ์ฐ๋ฉด ์ ๋๋์ง"์ ๋จ์ผ ๊ธฐ์ค์ด๋ค.
|
|
5
|
-
> ๊ฐ๋ณ ์ปดํฌ๋ํธ์ ์์ธ Props/Events๋ `node_modules/sellmate-design-system-react/dist/components/<์ด๋ฆ>/README.md` ๋ฅผ ์ฐธ์กฐํ๋ค.
|
|
5
|
+
> ๊ฐ๋ณ ์ปดํฌ๋ํธ์ ์์ธ Props/Events์ ๊ทธ Props ๊ฐ ์ฐ๋ ํ์
์ ์(Types)๋ `node_modules/sellmate-design-system-react/dist/components/<์ด๋ฆ>/README.md` ๋ฅผ ์ฐธ์กฐํ๋ค.
|
|
6
6
|
|
|
7
7
|
## 0. ์ต์ฐ์ ์์น โ ๋์์ธ ์์คํ
์ปดํฌ๋ํธ๊ฐ ๋จผ์ ๋ค
|
|
8
8
|
|
|
@@ -20,17 +20,17 @@
|
|
|
20
20
|
|
|
21
21
|
### 0-1. ์ ์ฒด ์ปดํฌ๋ํธ ์ธ๋ฑ์ค
|
|
22
22
|
|
|
23
|
-
๋ฌด์์ ๋ง๋ค์ง ์ ํ์ผ๋ฉด **์ด ํ์์ ๋จผ์ ์ฐพ๋๋ค.** ์์ธ Props ๋ `dist/components/<์ด๋ฆ>/README.md` ์ฐธ์กฐ.
|
|
23
|
+
๋ฌด์์ ๋ง๋ค์ง ์ ํ์ผ๋ฉด **์ด ํ์์ ๋จผ์ ์ฐพ๋๋ค.** ์์ธ PropsยทTypes ๋ `dist/components/<์ด๋ฆ>/README.md` ์ฐธ์กฐ.
|
|
24
24
|
|
|
25
25
|
**์ด ํ์์ ์ด๋ ๊ฒ์ ๊ณจ๋ผ์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ยง3-0 "์๋ โ ์ปดํฌ๋ํธ ๋ผ์ฐํ
" ์ผ๋ก ๊ฐ๋ค.** ํ๋ ค๋ ์ผ์ ๋ฌธ์ฅ์ผ๋ก ์ฐพ์ผ๋ฉด ๋ต์ด ํ๋ ๋์จ๋ค โ ์ฌ๊ธฐ ์ธ๋ฑ์ค๋ "๋ฌด์์ด ์๋์ง", ยง3-0 ์ "์ธ์ ๊ทธ๊ฑธ ์ฐ๋์ง" ๋ฅผ ๋ด๋นํ๋ค.
|
|
26
26
|
|
|
27
27
|
| ๋ถ๋ฅ | ์ปดํฌ๋ํธ |
|
|
28
28
|
| --- | --- |
|
|
29
|
-
| **๋ฒํผยท๋งํฌ** | `SButton` `SGhostButton` `SDropdownButton` `STextLink` `SSwitch` `SToggle` |
|
|
30
|
-
| **์
๋ ฅ (ํผ)** | `SForm` `SField` `SInput` `SNumberInput` `STextarea` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
|
|
31
|
-
| **๋ ์งยท์๊ฐ** | `SCalendar` `SDatePicker` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
|
|
29
|
+
| **๋ฒํผยท๋งํฌ** | `SButton` `SGhostButton` `SDropdownButton` `SSystemActionButton` `STextLink` `SSwitch` `SToggle` |
|
|
30
|
+
| **์
๋ ฅ (ํผ)** | `SForm` `SField` `SInput` `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
|
|
31
|
+
| **๋ ์งยท์๊ฐ** | `SCalendar` `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
|
|
32
32
|
| **ํยท๋ชฉ๋ก** | `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
|
|
33
|
-
| **๋ ์ด์์** | `SLayout` `SGnb` `SPage`(์ ๋ชฉ ์์ญ์ `header` prop) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
|
|
33
|
+
| **๋ ์ด์์** | `SLayout` `SGnb` `SGnbSystem` `SPage`(์ ๋ชฉ ์์ญ์ `header` prop) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
|
|
34
34
|
| **๋ด๋น๊ฒ์ด์
** | `STabs` `SPagination` `SStepper` |
|
|
35
35
|
| **ํ์ยท์ํ** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
|
|
36
36
|
| **์งํยท๋ก๋ฉ** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
|
|
@@ -60,19 +60,21 @@ AI ์์ด์ ํธ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์ด ๋ชฉ๋ก์ ๋ฐ๋์ ์งํจ
|
|
|
60
60
|
| --- | --- |
|
|
61
61
|
| `<button>` | `SButton`, `SGhostButton`, `SDropdownButton`, `STextLink` |
|
|
62
62
|
| `<input type="text/password/...">` | `SInput` |
|
|
63
|
+
| `<input type="search">` | `SSearchInput` |
|
|
63
64
|
| `<input type="number">` | `SNumberInput` |
|
|
64
65
|
| `<input type="checkbox">` | `SCheckbox`, `SToggle`, `SSwitch` |
|
|
65
66
|
| `<input type="radio">` | `SRadio`, `SRadioButton` |
|
|
66
67
|
| `<input type="file">` | `SFilePicker` |
|
|
67
68
|
| `<select>` | `SSelect` |
|
|
68
69
|
| `<textarea>` | `STextarea` |
|
|
70
|
+
| `contenteditable`, ์ง์ ๋ถ์ธ ์๋ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | `SEditor` |
|
|
69
71
|
| `<table>` | `STable`, `SKeyValueTable` |
|
|
70
72
|
| `<form>` | `SForm` |
|
|
71
73
|
| `<dialog>`, ์ง์ ๋ง๋ ์ค๋ฒ๋ ์ด | `SModal.confirm(...)`, `SModal.create(...)`, `SPopup` |
|
|
72
74
|
| `alert()`, `confirm()` | `SToast`, `SModal.confirm(...)` |
|
|
73
75
|
| ์ง์ ๋ง๋ ํญ/ํ์ด์ง๋ค์ด์
/์คํ
ํผ | `STabs`, `SPagination`, `SStepper` |
|
|
74
76
|
| `<ul>`/`<li>` ๋ก ๋ง๋ ๋ชฉ๋ก UI | `SList` + `SListItem` (๋๋๊ทธ ์ ๋ ฌ์ `SDraggableItem`) |
|
|
75
|
-
| ์ง์ ๋ง๋ ์น์
์นด๋(์ ๋ชฉ ๋ฐ + ๋ณธ๋ฌธ ๋ฐ์ค) | `SSectionHeaderCard`
|
|
77
|
+
| ์ง์ ๋ง๋ ์น์
์นด๋(์ ๋ชฉ ๋ฐ + ๋ณธ๋ฌธ ๋ฐ์ค) | `SSectionHeaderCard` ์ `title` / `padding` props |
|
|
76
78
|
| `<svg>` ์ง์ ์ฝ์
, ์ด๋ชจ์ง ์์ด์ฝ | `SIcon` |
|
|
77
79
|
| `<hr>` | `SDivider` |
|
|
78
80
|
| `<details>` / `<summary>` | `SExpansionItem` |
|
|
@@ -109,7 +111,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
109
111
|
|
|
110
112
|
`text-14 font-bold` ๊ฐ์ ์กฐํฉ์ ์ฆํฅ์ผ๋ก ๋ง๋ค์ง ์๋๋ค. ยง2-1์ `typo-*` ํ๋ฆฌ์
ํด๋์ค๋ฅผ ์ด๋ค.
|
|
111
113
|
|
|
112
|
-
### 1-4.
|
|
114
|
+
### 1-4. ์ซ์ยท๋ ์ง ํ๊ธฐ
|
|
113
115
|
|
|
114
116
|
**์ซ์๋ฅผ ํ๋ฉด์ ํ์ํ ๋๋ ์์ธ ์์ด `toLocaleString()` ์ ๊ฑฐ์ณ ์ธ ์๋ฆฌ๋ง๋ค ์ฝค๋ง๋ฅผ ๋ฃ๋๋ค.**
|
|
115
117
|
๊ธ์กยท์๋ยท๊ฑด์ยท์ฌ๊ณ ๋ฌด์์ด๋ , ํ
์ด๋ธยท์์ธยท์์ฝ ๋ฌธ๊ตฌ ์ด๋์ ๋์ด๋ ๊ฐ๋ค.
|
|
@@ -124,6 +126,18 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
124
126
|
|
|
125
127
|
**๋ฒํธยท์ฝ๋๋ ์ ์ธํ๋ค.** ์ ํ๋ฒํธยท์ฌ์
์๋ฒํธยท์ก์ฅ๋ฒํธยท์ํ์ฝ๋์ฒ๋ผ ๋์์ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ์ซ์๊ฐ ์๋๋ผ **์์์ด ์ ํด์ง ๋ฌธ์์ด**์ด๋ค. ์ฌ๊ธฐ์ ์ฝค๋ง๋ฅผ ๋ฃ์ผ๋ฉด ์ก์ฅ๋ฒํธ `123456789` ๊ฐ `123,456,789` ๋ก ๋ณด์ฌ ๊ฐ ์์ฒด๊ฐ ๋ฌ๋ผ์ง๋ค.
|
|
126
128
|
|
|
129
|
+
**๋ ์ง๋ `YYYY-MM-DD` ๋ก ์ด๋ค.** ์๋ฆฟ์๋ฅผ ์ฑ์ฐ๊ณ ํ์ดํ์ผ๋ก ๊ตฌ๋ถํ๋ค โ `2026-08-13`.
|
|
130
|
+
`2026. 8. 13.` ์ฒ๋ผ ์ ์ผ๋ก ๊ตฌ๋ถํ๊ฑฐ๋ ํ ์๋ฆฌ๋ก ์ค์ด์ง ์๋๋ค. ์๋ฆฟ์๊ฐ ๊ณ ์ ๋ผ์ผ ์ธ๋ก์ค์ด ๋ง๊ณ ,
|
|
131
|
+
์ปฌ๋ผ ํญ์ ํ์์ผ๋ก ๊ณ์ฐํ ์ ์๋ค(ยง3-4). ์ผ์๊ฐ ํ์ํ๋ฉด `YYYY-MM-DD HH:mm`.
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
โ {new Date(v).toLocaleDateString()} โ {`${y}. ${m}. ${d}.`}
|
|
135
|
+
โ
{v} // ์๋ฒ๊ฐ ์ด๋ฏธ YYYY-MM-DD ๋ก ์ค ๊ฐ
|
|
136
|
+
โ
format: (v: string) => v.slice(0, 10)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**`toLocaleDateString()` ์ ์ฐ์ง ์๋๋ค** โ ๋ก์ผ์ผ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ด ํ๊ธฐ๋ฅผ ์งํฌ ์ ์๋ค.
|
|
140
|
+
|
|
127
141
|
---
|
|
128
142
|
|
|
129
143
|
## 2. ์กฐํฉ ๊ท์น โ ํ๋ฉด์ ์ด๋ป๊ฒ ์๋๊ฐ
|
|
@@ -136,9 +150,9 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
136
150
|
|
|
137
151
|
| ์ธต | ๋ฌด์์ธ๊ฐ | ์ปดํฌ๋ํธ |
|
|
138
152
|
| --- | --- | --- |
|
|
139
|
-
| **์
ธ** | ์ฑ ์ ์ฒด ๋ผ๋. ํ์ด์ง๊ฐ ๋ฐ๋์ด๋ ๋จ๋๋ค | `SLayout` `SGnb` `SPage`(์ ๋ชฉ ์์ญ์ `header` prop) |
|
|
153
|
+
| **์
ธ** | ์ฑ ์ ์ฒด ๋ผ๋. ํ์ด์ง๊ฐ ๋ฐ๋์ด๋ ๋จ๋๋ค | `SLayout` `SGnb` `SGnbSystem`(GNB ๋งจ ์๋ ํจ๋) `SPage`(์ ๋ชฉ ์์ญ์ `header` prop) |
|
|
140
154
|
| **๋ธ๋ก** | `SPage` ์ ์ง๊ณ ์์. ํ์ด์ง๋ฅผ ์ธ๋ก๋ก ์๋ ๋จ์ | `SSectionHeaderCard` `SCard` `SForm` `SSplitter` `SScrollArea` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
141
|
-
| **์์** | ๋ธ๋ก **์์** ๋์ด๋ ์ปจํธ๋กค. ํผ์ ํ์ด์ง์ ์์ง ์๋๋ค | `SButton` `SGhostButton` `SDropdownButton` `SField` `SInput` `SNumberInput` `STextarea` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SSwitch` `SToggle` `SChipInput` `SBarcodeInput` `SFilePicker` `SDatePicker` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SImage` `SLinearProgress` `SCircleProgress` |
|
|
155
|
+
| **์์** | ๋ธ๋ก **์์** ๋์ด๋ ์ปจํธ๋กค. ํผ์ ํ์ด์ง์ ์์ง ์๋๋ค | `SButton` `SGhostButton` `SDropdownButton` `SSystemActionButton` `SField` `SInput` `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SSwitch` `SToggle` `SChipInput` `SBarcodeInput` `SFilePicker` `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SImage` `SLinearProgress` `SCircleProgress` |
|
|
142
156
|
| **์ธ๋ผ์ธ** | ํ
์คํธ ํ๋ฆยท์
ยท๋ผ๋ฒจ ์์ ์์ธ๋ค. ํผ์ ๋ธ๋ก์ด ๋์ง ์๋๋ค | `STag` `SBadge` `SIcon` `STextLink` `SChip` |
|
|
143
157
|
| **๋ ์ด์ด** | ๋ฌธ์ ํ๋ฆ **๋ฐ**์ ๋ ์ ๊ทธ๋ ค์ง๋ค. ์ด๋ ์ธต์์ ๋์ฐ๋ ๋ ์ด์์์ ์ํฅ์ด ์๋ค | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
|
|
144
158
|
|
|
@@ -158,7 +172,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
158
172
|
| ๋ด๋ ๊ฒ | ์ฌ ์ ์๋ ๊ฒ | ์ค๋ฉด ์ ๋๋ ๊ฒ |
|
|
159
173
|
| --- | --- | --- |
|
|
160
174
|
| `SPage` | **๋ธ๋ก๋ง** | **์์๋ฅผ ์ง์ ** โ ๋ฒํผ ํ๋๋ ๋ธ๋ก์ ๋ด์ ๋๋๋ค |
|
|
161
|
-
| `SSectionHeaderCard
|
|
175
|
+
| `SSectionHeaderCard` ์ `children` | ๊ทธ๋ฆฌ๋ ๋ธ๋ก ยท ์์ | `SSectionHeaderCard` ยท `SCard` (์นด๋ ๊ฒน์นจ, ยง3-7-8) |
|
|
162
176
|
| `SCard` | ๊ทธ๋ฆฌ๋ ๋ธ๋ก ยท ์์ | `SCard` ยท `SSectionHeaderCard` |
|
|
163
177
|
| `SForm` | ๋ธ๋ก (๋ณดํต `SKeyValueTable` + ํ๋จ ์ก์
) | โ |
|
|
164
178
|
| `SSplitter.Before` / `.After` | ๋ธ๋ก | โ |
|
|
@@ -222,7 +236,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
222
236
|
|
|
223
237
|
ํ์ด์ง ์ ๋ชฉ๋ง 18px ๋ก ํฌ๊ฒ ๋๊ณ ๊ทธ ์๋๋ 14 / 12 ๋ก ์ด์ดํ๊ฒ ๊ฐ๋ค. ์ค๊ฐ ํฌ๊ธฐ(16px)๋ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์์ ์ฐ์ง ์๋๋ค.
|
|
224
238
|
|
|
225
|
-
- **ํ์ด์งยท์น์
์ ๋ชฉ์ ํ์ดํฌ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.** `SPage` ์ `header.title`, `SSectionHeaderCard
|
|
239
|
+
- **ํ์ด์งยท์น์
์ ๋ชฉ์ ํ์ดํฌ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.** `SPage` ์ `header.title`, `SSectionHeaderCard` ์ `header.title` ์ด ์ด๋ฏธ ๋ฃ๋๋ค โ ๊ทธ ์์ `typo-heading-lg`/`typo-heading-sm` ์ ๋ ์์ฐ์ง ์๋๋ค.
|
|
226
240
|
- **ํ์ ์ ๋ชฉ์ด ํ์ํ๋ฉด ๋จผ์ ์น์
์ ๋๋ ์ ์๋์ง ๋ณธ๋ค.** ํ ์น์
์์์ ์ ๋ชฉ์ด ๋ ๋จ์ผ๋ก ๊ฐ๋ฆฐ๋ค๋ ๊ฒ์ ๋๊ฐ ์น์
์ด ๋์ด๋ผ๋ ๋ป์ด๋ค (ยง3-7-8).
|
|
227
241
|
- ๋ณธ๋ฌธ ์์์ ํ ๋จ์ด๋ฅผ ๊ฐ์กฐํ ๋๋ `typo-body-sm-medium` ์ ์ด๋ค. `typo-body-sm-bold` ๋ ์ ๋ชฉ ์ฑ๊ฒฉ์ ์งง์ ๋ผ๋ฒจ์๋ง ์ด๋ค. <!-- TODO(๋์์ธ): ๊ฐ์กฐ ๊ตต๊ธฐ ๊ธฐ์ค ํ์ -->
|
|
228
242
|
|
|
@@ -286,13 +300,14 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
286
300
|
|
|
287
301
|
- **๋ผ๋์ค๋ `SRadioGroup` ์ ์ด๋ค.** `direction="horizontal" | "vertical"` ๋ง ์ฃผ๋ฉด ๊ฐ๊ฒฉ์ ์์์ ๋ง์ถ๋ค โ ์ง์ `flex` ๋ก ๊ฐ์ธ์ง ์๋๋ค.
|
|
288
302
|
- `SRadioButton` ๊ทธ๋ฃน์ ๊ฐ๊ฒฉ์ `-1px`(ํ
๋๋ฆฌ ๊ฒน์นจ ์ฒ๋ฆฌ)์ด๋ผ ์์ผ๋ก ๋ง๋ค์ง ์๋๋ค.
|
|
303
|
+
- **์นด๋ํ ๋ผ๋์ค๋ `SRadioCardGroup` ์ ์ด๋ค.** ์นด๋ ์ฌ์ด ๊ฐ๊ฒฉ์ ์ํยท์์ง์ด ๊ฐ๊ณ `SRadioGroup` ๊ณผ ๋ค๋ฅด๋ฏ๋ก, ์์ผ๋ก `flex gap-โฆ` ์ ๋ง์ถ์ง ๋ง๊ณ `direction` ๋ง ์ค๋ค.
|
|
289
304
|
- ์ ํํ ๊ฐ์ด ํ์ํ๋ฉด ํ ํฐ์ ์ง์ ์ฐธ์กฐํด๋ ๋๋ค: `gap-[var(--cmp-checkbox-group-gap-horizontal)]`
|
|
290
305
|
|
|
291
306
|
#### ์น์
ยทํจ๋ ์์ชฝ ์ฌ๋ฐฑ
|
|
292
307
|
|
|
293
308
|
**ํ์ด์ง ํ๋ ์์ ์์ธ ์์ด `SPage` ๊ฐ ๋ฃ๋๋ค.** ์๋ ๊ท์น์ ๊ทธ ์์ **์น์
ยทํจ๋ ๋ ๋ฒจ์๋ง** ์ ์ฉ๋๋ค.
|
|
294
309
|
|
|
295
|
-
**์ปดํฌ๋ํธ๊ฐ ์์ฒด ์ฌ๋ฐฑ์ ๊ฐ์ง๋ฉด ์ปดํฌ๋ํธ ๊ธฐ์ค์ด ์ฐ์ ํ๋ค.** `SKeyValueTable`ยท`STable` ์ฒ๋ผ ์๊ธฐ ์ฌ๋ฐฑ์ ํ ํฐ์ผ๋ก ๊ฐ๊ณ ์๋ ์ปดํฌ๋ํธ์๋ ์ด ํ์ ์ ์ ์ฉํ์ง ์๋๋ค โ ์๋ ๊ฒ์ด ์๋ค. ์๋ ํ์ ์ด ํ์ํ ์๋ฆฌ๋ **์ง์ ๋ง๋ ์ปจํ
์ด๋**์ **`SSectionHeaderCard
|
|
310
|
+
**์ปดํฌ๋ํธ๊ฐ ์์ฒด ์ฌ๋ฐฑ์ ๊ฐ์ง๋ฉด ์ปดํฌ๋ํธ ๊ธฐ์ค์ด ์ฐ์ ํ๋ค.** `SKeyValueTable`ยท`STable` ์ฒ๋ผ ์๊ธฐ ์ฌ๋ฐฑ์ ํ ํฐ์ผ๋ก ๊ฐ๊ณ ์๋ ์ปดํฌ๋ํธ์๋ ์ด ํ์ ์ ์ ์ฉํ์ง ์๋๋ค โ ์๋ ๊ฒ์ด ์๋ค. ์๋ ํ์ ์ด ํ์ํ ์๋ฆฌ๋ **์ง์ ๋ง๋ ์ปจํ
์ด๋**์ **`SSectionHeaderCard` ์ `padding`** ๋ ๊ณณ๋ฟ์ด๋ค.
|
|
296
311
|
|
|
297
312
|
ํ์ ์ **๊ทธ ์์ญ์ด ๋ด๊ณ ์๋ ์ฝํ
์ธ ๋ฉ์ด๋ฆฌ์ ์ข
๋ฅ ์**๋ก ํ๋ค.
|
|
298
313
|
|
|
@@ -327,14 +342,67 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
327
342
|
|
|
328
343
|
**์ค์ฒฉ๋๋ฉด ์์ชฝ ์ฌ๋ฐฑ์ ์ฃผ์ง ์๋๋ค.** 24 ์์ญ ์์ ๋ ์ฌ๋ฐฑ์ ์ฃผ๋ฉด ๊ฐ์ฅ์๋ฆฌ๊ฐ 40 ์ผ๋ก ๋ฒ์ด์ ธ ํ ๋ฉด์ ์ฒ๋ผ ์ฝํ๋ค. ์์ชฝ ์นด๋ยท๋ชฉ๋ก์ด **๋ฐฐ๊ฒฝ์์ด ๋ค๋ฅด๊ฑฐ๋ ํ
๋๋ฆฌ๊ฐ ์์ด** ๊ฒฝ๊ณ๊ฐ ์ค์ค๋ก ๋ณด์ด๋ ๊ฒฝ์ฐ์๋ง ์๊ธฐ ์ฌ๋ฐฑ์ ์ ์งํ๋ค.
|
|
329
344
|
|
|
330
|
-
`SSectionHeaderCard
|
|
345
|
+
`SSectionHeaderCard` ๋ ์ด ๊ท์น์ **`padding` prop ์ผ๋ก ๋ฐ๋๋ค** โ ์ง์ `p-sd-*` ๋ฅผ ์ฃผ์ง ์๋๋ค.
|
|
346
|
+
|
|
347
|
+
```tsx
|
|
348
|
+
<SSectionHeaderCard title="๊ธฐ๋ณธ ์ ๋ณด">โฆ</SSectionHeaderCard> {/* ๊ธฐ๋ณธ = 16 */}
|
|
349
|
+
<SSectionHeaderCard title="๊ธฐ๋ณธ ์ ๋ณด" padding="wide">โฆ</SSectionHeaderCard> {/* 3์ข
๋ฅ ์ด์ */}
|
|
350
|
+
<SSectionHeaderCard title="๊ธฐ๋ณธ ์ ๋ณด" padding="none">โฆ</SSectionHeaderCard> {/* ํ๋ฅผ ๊ฐ์ฅ์๋ฆฌ๊น์ง */}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
##### ์นด๋ ๊ฐ์ฅ์๋ฆฌ๊น์ง ์ฑ์ฐ๋ ํ๋ ์๊ธฐ ํ
๋๋ฆฌ๋ฅผ ๋๋ค
|
|
354
|
+
|
|
355
|
+
์ฌ๊ธฐ์ "ํ"๋ **`STable` ๊ณผ `SKeyValueTable` ๋ ๋ค**๋ค. ๋ ์ปดํฌ๋ํธ ๋ชจ๋ ์๊ธฐ ๋ฐ๊นฅ ํ
๋๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ, ์นด๋๋ ๋ฐ๊นฅ ํ
๋๋ฆฌ๋ฅผ ๊ทธ๋ฆฐ๋ค. `padding="none"` ์ผ๋ก ๋ถ์ด๋ฉด **1px ๋ ๊ฐ๊ฐ ๋๋ํ ๋์ฌ ๊ทธ ๋ณ๋ง 2px** ๋ก ๋ณด์ธ๋ค(์นด๋์ ๋ค๋ฅธ ๋ณ์ 1px ๊ทธ๋๋ก๋ผ ๊ตต๊ธฐ๊ฐ ์ด๊ธ๋๋ค).
|
|
356
|
+
|
|
357
|
+
```tsx
|
|
358
|
+
<SSectionHeaderCard title="๋ฐ์ฃผ ๋ด์ญ" padding="none">
|
|
359
|
+
<SKeyValueTable fields={โฆ} bordered={false} radius="useTop" />
|
|
360
|
+
<STable columns={โฆ} rows={โฆ} bordered={false} radius="useTop" />
|
|
361
|
+
</SSectionHeaderCard>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
- **`bordered={false}`** ๋ก ํ์ ํ
๋๋ฆฌ๋ฅผ ๋๋ค. ์นด๋๊ฐ ์ด๋ฏธ ๊ทธ๋ฆฐ๋ค.
|
|
365
|
+
- **`radius="useTop"`** ์ผ๋ก ์์ชฝ ๋ชจ์๋ฆฌ๋ฅผ ์ฃฝ์ธ๋ค. ์๋์ชฝ ๋ผ์ด๋๋ ์นด๋๊ฐ ์ฒ๋ฆฌํ๋ค.
|
|
366
|
+
- `STable` ์ **ํ์ด์ง๋ค์ด์
๋ฐ์ ํ
๋๋ฆฌ์ `-mt-px` ๊ฒน์นจ๋ ํจ๊ป ๊บผ์ง๋ค** โ ๋ณธ๋ฌธ ํ
๋๋ฆฌ๊ฐ ์์ผ๋ฉด ๊ฒน์น ๋์์ด ์์ด, ๊ทธ๋๋ก ๋๋ฉด ํ์ด์ง๋ค์ด์
๋ง ํ
๋๋ฆฌ๋ฅผ ๊ฐ๊ณ 1px ์ด๊ธ๋๋ค.
|
|
367
|
+
|
|
368
|
+
#### ๋ณธ๋ฌธ ๋ฐํ ๋๋ฌ์ํ๊ธฐ (์ ํ)
|
|
369
|
+
|
|
370
|
+
`SSectionHeaderCard` ๋ **`background="neutral"`** ๋ก ๋ณธ๋ฌธ ๋ฐํ์ ํ ๋จ๊ณ ๋๋ฌ์ํ ์ ์๋ค. ํฐ ๋ฉด ๋ฉ์ด๋ฆฌ(ํยท๋ฆฌ์คํธ)๊ฐ ์ฌ๋ฟ์ผ ๋ ๊ทธ ๋ฉ์ด๋ฆฌ๋ค์ด **"๋ฉด ์์ ๋์ธ ๊ฐ์ฒด"๋ก ์ฝํ ๋ฌถ์์ด ๋ ๊ฐํ๊ฒ ๋ณด์ธ๋ค.**
|
|
331
371
|
|
|
332
372
|
```tsx
|
|
333
|
-
<SSectionHeaderCard
|
|
334
|
-
<SSectionHeaderCard.Body padding="wide">โฆ</SSectionHeaderCard.Body> {/* 3์ข
๋ฅ ์ด์ */}
|
|
335
|
-
<SSectionHeaderCard.Body padding="none">โฆ</SSectionHeaderCard.Body> {/* ํ๋ฅผ ๊ฐ์ฅ์๋ฆฌ๊น์ง */}
|
|
373
|
+
<SSectionHeaderCard title="๋ฐ์ฃผ ์์ธ" background="neutral">โฆํฐ ๋ฉด ํ ์ฌ๋ฟโฆ</SSectionHeaderCard>
|
|
336
374
|
```
|
|
337
375
|
|
|
376
|
+
**๊ธฐ๋ณธ๊ฐ(`frame`, ํฐ ๋ฉด)์ด ํ๋ฆฐ ๊ฒ์ด ์๋๋ค.** ์ด ์ ์ฅ์์ ํยท๋ฆฌ์คํธ๋ ํ
๋๋ฆฌยท๋ผ์ด๋ยทํค๋ ์ค๊ณผ `gap-sd-12` ๋ฅผ ์ด๋ฏธ ๊ฐ๊ณ ์์ด ํฐ ๋ฐํ์์๋ ๊ฒฝ๊ณ๊ฐ ์ฝํ๋ค. ์๊ณ๋ฅผ ํ ๋จ๊ณ ๋ ์ฃผ๊ณ ์ถ์ ๋ ๊ณ ๋ฅด๋ ์๋จ์ด์ง, ๋ฉ์ด๋ฆฌ๊ฐ ๋ ์ด์์ด๋ฉด ๋ฐ๋์ ๊น์์ผ ํ๋ ๊ท์น์ด ์๋๋ค.
|
|
377
|
+
|
|
378
|
+
๊น์๋ **ํจ๊ณผ๊ฐ ์๋** ์๋ฆฌ๋ ์๋ค.
|
|
379
|
+
|
|
380
|
+
- **๋ฉ์ด๋ฆฌ๊ฐ ๊ฐ์ฅ์๋ฆฌ๊น์ง ์ฐจ๋ ๊ฒฝ์ฐ** โ `padding="none"` ์ผ๋ก ํ๋ฅผ ์ฑ์ฐ๋ฉด ๊น ๋ฐํ์ด ํ์ ์์ ํ ๊ฐ๋ ค ๋ณด์ด์ง ์๋๋ค.
|
|
381
|
+
- **๋ฉ์ด๋ฆฌ์ ํ์ ๋ฉด์ด ์์ธ ๊ฒฝ์ฐ** โ ๊ทธ ๋ฉ์ด๋ฆฌ๊ฐ ๋ฐํ๊ณผ ๊ฐ์ ์์ด ๋์ด ๋ฌปํ๋ค.
|
|
382
|
+
- **๋งจ ํ
์คํธยทํผ ์ปจํธ๋กค๋ง ์๋ ๋ณธ๋ฌธ** โ ๋ ์ค๋ฅผ ํฐ ๋ฉด์ด ์๋ค.
|
|
383
|
+
|
|
384
|
+
๋ฐํ์ ๊น ๊ฒฝ์ฐ, ํ ์ฌ์ด ๊ตฌ๋ถ์ (`SDivider`)์ ๋๊ฐ ๋ถํ์ํด์ง๋ค โ ์์ด ์ด๋ฏธ ๊ฒฝ๊ณ๋ฅผ ๋ง๋ ๋ค.
|
|
385
|
+
|
|
386
|
+
#### ํ์ด์ง ๋์ด โ ํ๋ฉด์ ๊ฝ ์ฑ์ฐ๊ณ , ์คํฌ๋กค์ ๊ฐ ์์ญ ์์์
|
|
387
|
+
|
|
388
|
+
**๋๋ถ๋ถ์ ํ๋ฉด์ ๋ณธ๋ฌธ์ด ์ฐฝ์ ๊ฝ ์ฑ์ฐ๊ณ , ์คํฌ๋กค์ ๊ฐ ์์ญ ์์์ ์ผ์ด๋๋ค.** ํ๋ ์๊ธฐ ์์์ ์คํฌ๋กคํ๊ณ , ์ข์ธก ๋ชฉ๋ก์ ๋ชฉ๋ก ์์์ ์คํฌ๋กคํ๊ณ , ํ์ด์ง๋ค์ด์
ยทํ๋จ ์ก์
์ ์๋ฆฌ์ ๊ณ ์ ๋๋ค. ์ด๊ฒ์ด ํ์ค์ด๋ค โ ๋ชฉ๋ก ํ์ด์ง๋ง์ ์์ธ๊ฐ ์๋๋ค.
|
|
389
|
+
|
|
390
|
+
`SPage` ์ `contentHeight="fill"` ์ด ๊ทธ ๋ชจ๋๋ค. ํ๋ ์ ์ปดํฌ๋ํธ์์ ๋๊ธด๋ค(ยง4-1).
|
|
391
|
+
|
|
392
|
+
```tsx
|
|
393
|
+
<SPage contentHeight="fill">
|
|
394
|
+
<div className="flex h-full min-h-0 flex-col gap-sd-12">
|
|
395
|
+
<STableBar โฆ />
|
|
396
|
+
<STable className="min-h-0 flex-1" pagination={โฆ} />
|
|
397
|
+
</div>
|
|
398
|
+
</SPage>
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
- **`min-h-0 flex-1` ์ฌ์ฌ์ด ํ์ด์ง์ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์ด๋ค.** `fill` ์ ๋ณธ๋ฌธ ๋ํผ์ `h-full` ์ ์ฃผ๊ณ , ๊ฑฐ๊ธฐ์๋ถํฐ ์คํฌ๋กค๋ ์๋ฆฌ๊น์ง `min-h-0 flex-1` ์ด ์ด์ด์ ธ์ผ ์์์ด ๋จ์ ๋์ด๋ฅผ ์ก๋๋ค.
|
|
402
|
+
- **์ฌ์ฌ์ด ํ ๊ตฐ๋ฐ๋ง ๋๊ฒจ๋ ์์์ด ๋์ด๋ฅผ ๋ชป ์ก๋๋ฐ, ๊ทธ ์คํจ๊ฐ ์กฐ์ฉํ๋ค** โ ํ๋ฉด์ ๊ทธ๋ ค์ง๊ณ ์คํฌ๋กค๋ง ์๋ฑํ ๋ฐ์ ์ผ์ด๋๋ค. ์ฒดํฌ๋ฆฌ์คํธ(ยง5)๋ก ํ์ธํ๋ค.
|
|
403
|
+
- **ํ์ด์ง ์คํฌ๋กค์ ์์ธ๋ค.** ๋ธ๋ก์ ๋์ด๊ฐ ์ ํด์ ธ ์๊ณ ๊ทธ ๋์ด๊ฐ ์ฐฝ๋ณด๋ค ํด ๋๋ง ํ์ด์ง๊ฐ ์คํฌ๋กคํ๋ค. ๊ทธ๋๋ง `contentHeight="auto"` ์ `scrollEndSpacing` ์ ์ผ ๋ค.
|
|
404
|
+
- **`SScrollArea` ๋ก ํ์ด์ง ๋ณธ๋ฌธ ์ ์ฒด๋ฅผ ๊ฐ์ธ์ง ์๋๋ค.** ์คํฌ๋กค์ `SPage` ์ `<main>` ๋ชซ์ด๊ณ , ๊ฐ์ธ๋ฉด ์คํฌ๋กค๋ฐ๊ฐ ๋ณธ๋ฌธ ํจ๋ฉ ์์ชฝ์ผ๋ก ๋ค์ด์ ๊ฐ์ฅ์๋ฆฌ์์ ๋ฌ๋ค. `SScrollArea` ๋ ํ์ด์ง ์์ ํน์ ์์ญ์๋ง ์ด๋ค(ยง3-0 D).
|
|
405
|
+
|
|
338
406
|
#### ์คํฌ๋กค ์์ญ์ ํ๋จ ์ฌ๋ฐฑ
|
|
339
407
|
|
|
340
408
|
์คํฌ๋กค์ ๋๊น์ง ๋ด๋ ธ์ ๋ ๋ง์ง๋ง ํญ๋ชฉ์ด ํ๋ฉด ๊ฒฝ๊ณ์ ๋ถ์ผ๋ฉด **๋ชฉ๋ก์ด ๋๋ ๊ฒ์ธ์ง ๋ ์๋ ๊ฒ์ธ์ง** ์ฝํ์ง ์๋๋ค. ๊ทธ๋์ ์คํฌ๋กค ์์ญ์ **ํ๋จ๋ง** ๋๊ฒ ๋๋ค. ๋๋จธ์ง ์ธ ๋ฐฉํฅ์ ์ 16 / 24 ๊ท์น ๊ทธ๋๋ก๋ค.
|
|
@@ -342,9 +410,9 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
342
410
|
| ์คํฌ๋กค ์ข
๋ฅ | ์ด๋ป๊ฒ |
|
|
343
411
|
| --- | --- |
|
|
344
412
|
| **ํจ๋ ์์ฒด ์คํฌ๋กค** (์ข์ธก ๋ชฉ๋ก, ์ค์ ๋ํ ๋ฑ) | ๊ทธ ํจ๋ ์์ชฝ ํ๋จ์ `pb-[var(--cmp-pageBody-padding-scrollEnd)]` โ `SPage` ์ ๊ฐ์ ํ ํฐ์ด๋ผ ๊ฐ์ด ๋ฐ๋์ด๋ ํจ๊ป ๋ฐ๋ผ๊ฐ๋ค |
|
|
345
|
-
| **ํ์ด์ง ๋จ์ ์คํฌ๋กค** | **`SPage`
|
|
413
|
+
| **ํ์ด์ง ๋จ์ ์คํฌ๋กค** | **`SPage` ์ `scrollEndSpacing` ์ผ๋ก ์ผ ๋ค. ์ง์ ํจ๋ฉ์ ์ฃผ์ง ์๋๋ค** |
|
|
346
414
|
|
|
347
|
-
`
|
|
415
|
+
**`scrollEndSpacing` ์ ๊ธฐ๋ณธ์ด ๊บผ์ ธ ์๋ค.** ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋ ๋๋ง ํ์ํ ๊ฐ์ด๋ผ, ์กฐ๊ฑด ์์ด ๋ถ์ด๋ฉด ๋ด์ฉ์ด ํ๋ฉด์ ๊ฑฐ์ ๋ฑ ๋ง๋ ํ์ด์ง๊น์ง ๊ทธ ์ฌ๋ฐฑ ๋๋ฌธ์ ์คํฌ๋กค๋๊ฒ ๋ง๋ ๋ค. ํ์ด์ง ์คํฌ๋กค์ ์ฐ๋ ํ๋ฉด(`contentHeight="auto"` + ๋ด์ฉ์ด ์ฐฝ๋ณด๋ค ๊น)์์๋ง ์ผ ๋ค. ํ์ด์ง๋ค์ด์
์ฒ๋ผ ๋์ ์๋ ค์ฃผ๋ ๊ฒ์ด ์ด๋ฏธ ์์ผ๋ฉด ์ผ์ง ์๋๋ค.
|
|
348
416
|
|
|
349
417
|
### 2-3. ์์
|
|
350
418
|
|
|
@@ -406,11 +474,15 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
406
474
|
| --- | --- | --- |
|
|
407
475
|
| ํ ์ค ํ
์คํธ๋ฅผ ๋ฐ๋๋ค | `SInput` | ยง3-7-1 |
|
|
408
476
|
| ์ฌ๋ฌ ์ค ํ
์คํธ๋ฅผ ๋ฐ๋๋ค | `STextarea` | ยง3-7-1 |
|
|
477
|
+
| ์ ๋ชฉยท๊ตต๊ฒยท๋ชฉ๋กยท์ ๊ฐ์ **์์์ด ๋จ์์ผ ํ๋** ๊ธ์ ๋ฐ๋๋ค | `SEditor` | ยง3-7-1 |
|
|
478
|
+
| ๋ชฉ๋กยท๊ฒฐ๊ณผ๋ฅผ ๊ฒ์์ด๋ก ์ขํ๋ค | `SSearchInput` | ยง3-7-1 |
|
|
409
479
|
| ์ซ์(์๋ยท๊ธ์ก)๋ฅผ ๋ฐ๋๋ค | `SNumberInput` | |
|
|
410
480
|
| ๋ฐ์ฝ๋๋ฅผ ์ค์บํด ๋ฐ๋๋ค | `SBarcodeInput` | |
|
|
411
481
|
| ๋ชฉ๋ก์์ ํ๋ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SSelect` | ยง3-7-2 |
|
|
412
482
|
| ์ ํ์ง๋ฅผ ํญ์ ํผ์ณ ๋๊ณ ํ๋ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SRadioGroup` | ยง3-7-2 |
|
|
413
483
|
| ๋ฒํผ ๋ชจ์์ผ๋ก ๋ชจ๋๋ฅผ ํ๋ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SRadioButton` | ยง3-7-2 |
|
|
484
|
+
| ์ ํ์ง๋ง๋ค ์ค๋ช
์ด ๋ถ์ด ํ ์ค๋ก๋ ์ ๋๋ค | `SRadioCardGroup` | ยง3-7-2 |
|
|
485
|
+
| ์ค๋ช
์ด ๋ถ์ ์ ํ์ง ์นด๋ ํ๋๋ฅผ ์ง์ ๋ฐฐ์นํ๋ค | `SRadioCard` | ยง3-7-2 |
|
|
414
486
|
| ๋ผ๋์ค ํ๋๋ฅผ ํ ์
๋ฑ์ ์ง์ ๋ฐฐ์นํ๋ค | `SRadio` | ยง3-7-2 |
|
|
415
487
|
| ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๋ค / ๋์๋ฅผ ๋ฐ๋๋ค | `SCheckbox` | ยง3-7-3 |
|
|
416
488
|
| ์ผ๋ ์ฆ์ ๋ฐ์๋๋ ์ค์ ์ ์ค๋ค | `SSwitch` | ยง3-7-3 |
|
|
@@ -419,6 +491,8 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
419
491
|
| ์
๋ ฅ๋ ๊ฐ ํ๋๋ฅผ ์ง์ฐ๊ฑฐ๋ ๊ณ ์น๊ฒ ํ๋ค | `SChip` | ยง3-1 |
|
|
420
492
|
| ํ์ผ์ ๋ฐ๋๋ค | `SFilePicker` | |
|
|
421
493
|
| ๋ ์ง ํ๋๋ฅผ ๋ฐ๋๋ค | `SDatePicker` | ยง3-7-4 |
|
|
494
|
+
| ์ฐ๋ ์ ํ ๋ฆฌ์คํธ๋ง ์ปค์คํ
์กฐํฉ์ ๋ฃ๋๋ค | `SDatePickerYearListbox` | ยง3-7-4 |
|
|
495
|
+
| ์ฐ๋+์ ์ ํ ๋ฆฌ์คํธ๋ง ์ปค์คํ
์กฐํฉ์ ๋ฃ๋๋ค | `SDatePickerMonthListbox` | ยง3-7-4 |
|
|
422
496
|
| ๋ ์ง ๊ธฐ๊ฐ์ ๋ฐ๋๋ค | `SDateRangePicker` | ยง3-7-4 |
|
|
423
497
|
| ์๊ฐ ํ๋๋ฅผ ๋ฐ๋๋ค | `STimePicker` | |
|
|
424
498
|
| ์๊ฐ ๋ฒ์๋ฅผ ๋ฐ๋๋ค | `STimeRangePicker` | |
|
|
@@ -452,6 +526,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
452
526
|
| ๋ผ๋ฒจ์ด ์๋ ์ผ๋ฐ ์ก์
์ ์ค๋ค | `SButton` | ยง3-5 |
|
|
453
527
|
| ์์ด์ฝ ํ๋๋ก ๋ป์ด ํตํ๋ ๋ถ๊ฐ ์กฐ์์ ์ค๋ค | `SGhostButton` | ยง3-5-5 |
|
|
454
528
|
| ํ ๋ฒํผ์ ์ฌ๋ฌ ์ ํ์ง๋ฅผ ๋งค๋จ๋ค | `SDropdownButton` | ยง3-5-4 |
|
|
529
|
+
| GNB system ํจ๋์์ ํ ์ค์ง๋ฆฌ ํ ์ก์
์ ์ค๋ค | `SSystemActionButton` | ยง3-5-7 |
|
|
455
530
|
|
|
456
531
|
#### D. ํ๋ฉด์ ๋ด๊ณ ๋๋๋ค
|
|
457
532
|
|
|
@@ -459,6 +534,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
459
534
|
| --- | --- | --- |
|
|
460
535
|
| ์ฑ ์
ธ(์๋จ๋ฐ + ๋ด๋น + ๋ณธ๋ฌธ)์ ์ธ์ด๋ค | `SLayout` | ยง4-1 |
|
|
461
536
|
| ์ข์ธก ๋ด๋น๊ฒ์ด์
์ ๋ง๋ ๋ค | `SGnb` | ยง4-1 |
|
|
537
|
+
| ์ข์ธก ๋ด๋น๊ฒ์ด์
๋งจ ์๋์ ์๋น์คยท๋๋ฉ์ธยท์๋ฆผยท์ค์ ยท๊ณ์ ๋ฌถ์์ ๋ถ์ธ๋ค | `SGnbSystem` | ยง4-1 |
|
|
462
538
|
| ํ์ด์ง ๋ณธ๋ฌธ์ ๋ด๋๋ค (ํจ๋ฉยท์คํฌ๋กค) | `SPage` | ยง4-1 |
|
|
463
539
|
| ํ์ด์ง ์ ๋ชฉ(+ ์๋ธ ํ
์คํธยท๋ค๋ก๊ฐ๊ธฐยท์ฐ์ธก ์ฌ๋กฏ)์ ๋ง๋ ๋ค | `SPage` ์ `header` prop | ยง4-1 |
|
|
464
540
|
| ์ ๋ชฉ ์๋ ์น์
์ผ๋ก ๋ฌถ๋๋ค | `SSectionHeaderCard` | ยง3-7-8 |
|
|
@@ -467,6 +543,8 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
467
543
|
| ์ฌ์ฉ์๊ฐ ์์ญ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ฒ ํ๋ค | `SSplitter` | ยง3-6 |
|
|
468
544
|
| ํน์ ์์ญ ์์์๋ง ์คํฌ๋กค์ํจ๋ค | `SScrollArea` | |
|
|
469
545
|
|
|
546
|
+
**`SScrollArea` ๋ก ํ์ด์ง ๋ณธ๋ฌธ ์ ์ฒด๋ฅผ ๊ฐ์ธ์ง ์๋๋ค.** ํ์ด์ง ์คํฌ๋กค์ `SPage` ์ `<main>` ๋ชซ์ด๋ค โ ๊ฐ์ธ๋ฉด ์คํฌ๋กค๋ฐ๊ฐ ๋ณธ๋ฌธ ํจ๋ฉ ์์ชฝ์ผ๋ก ๋ค์ด์ ํ์ด์ง ๊ฐ์ฅ์๋ฆฌ์์ ๋จ์ด์ ธ ๊ทธ๋ ค์ง๋ค (ยง2-2).
|
|
547
|
+
|
|
470
548
|
#### E. ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋์ํจ๋ค
|
|
471
549
|
|
|
472
550
|
| ํ๋ ค๋ ์ผ | ์ปดํฌ๋ํธ | ๊ฐ๋ฆผ |
|
|
@@ -550,9 +628,26 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
550
628
|
| | ๋ฌด์์ธ๊ฐ | ํฌ๊ธฐ |
|
|
551
629
|
| --- | --- | --- |
|
|
552
630
|
| **SPopup** | **๋ณ๋ ๋ธ๋ผ์ฐ์ ์ฐฝ** (`window.open` ์ผ๋ก ์ฌ๋ ์ ์ฉ ๋ผ์ฐํธ) | ์ฐฝ ํฌ๊ธฐ = ์ฝํ
์ธ ํฌ๊ธฐ |
|
|
553
|
-
| **SActionModal** | ๊ฐ์ ์ฐฝ ์ ์ค๋ฒ๋ ์ด ์นด๋ | `width`
|
|
631
|
+
| **SActionModal** | ๊ฐ์ ์ฐฝ ์ ์ค๋ฒ๋ ์ด ์นด๋ | `width` prop. **๋์ด๋ ์ฃผ์ง ์๋๋ค** (์๋) |
|
|
554
632
|
| **SModal.confirm** (`SConfirmModal`) | ๊ฐ์ ์ฐฝ ์ ํ์ธ์ฐฝ | ๊ณ ์ |
|
|
555
633
|
|
|
634
|
+
##### ๋ชจ๋ฌ ๋์ด๋ ๋ด์ฉ์ด ์ ํ๊ณ , ์ํ์ ์์คํ
์ด ๊ฑด๋ค
|
|
635
|
+
|
|
636
|
+
**`height` ๋ฅผ ์ฃผ์ง ์๋๋ค.** ๋์ด๋ ๋ด์ฉ์ด ์ ํ๊ณ , ์นด๋๋ **๋ทฐํฌํธ์ 85%** ์์ ๋ฉ์ถ๋ค(์์คํ
์ด ๋ชจ๋ ๋ชจ๋ฌ์ ๊ฑด๋ค). ๋ฐ์ดํฐ๊ฐ ์ ์ผ๋ฉด ๋ด์ฉ๋งํผ ์์์ง๊ณ , ๋ง์ผ๋ฉด 85% ์์ ๋ฉ์ถ๋ค.
|
|
637
|
+
|
|
638
|
+
๊ฐ๋ก๋ ์ข์ฐ 24px ์ฉ์ ๋บ ๊ฐ์ผ๋ก ํด๋จํํ๋๋ฐ **์ธ๋ก๋ง ๋น์จ**์ธ ์ด์ ๋, ๋ชจ๋ฌ์ด ํ๋ฉด์ ๊ฑฐ์ ๋ค ๋ฎ์ผ๋ฉด ๋ค ๋งฅ๋ฝ์ด ์ฌ๋ผ์ ธ "๋ ์๋ ๊ฒ"์ผ๋ก ์ฝํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
639
|
+
|
|
640
|
+
**์ํ์ ๋ฟ์์ ๋ ์คํฌ๋กค๋์ด์ผ ํ๋ ๊ฒ์ ๋ชจ๋ฌ ๋ณธ๋ฌธ์ด ์๋๋ผ ํ๋ค.**
|
|
641
|
+
|
|
642
|
+
```tsx
|
|
643
|
+
<SActionModal modalTitle="๋ฐ์ฃผ ๊ฒํ " button={{ label: 'ํ์ ', onClick: submit }}>
|
|
644
|
+
{/* ํ๊ฐ ๋จ์ ๋์ด๋ฅผ ๋จน๊ณ ์๊ธฐ ์์์ ์คํฌ๋กคํ๋ค โ ํค๋ยทํฉ๊ณยทํธํฐ๋ ๋ ๋ณด์ธ๋ค */}
|
|
645
|
+
<STable className="min-h-0 flex-1" columns={columns} rows={rows} />
|
|
646
|
+
</SActionModal>
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
๋ณธ๋ฌธ(`overflow-auto` ์์ญ)์ด ํต์งธ๋ก ์คํฌ๋กค๋๋ฉด ํ ํค๋์ ํฉ๊ณ ์ค์ด ์๋ก ๋ฐ๋ ค ์ฌ๋ผ์ง๋ค. `SActionModal` ์ ๋ณธ๋ฌธ์ ์ด๋ฏธ `min-h-0 flex-1` ์ด๋ฏ๋ก, ํ์ `min-h-0 flex-1` ์ ์ฃผ๋ฉด ์ธ๋ก ์ถ์ด ์ด์ด์ ธ ํ๋ง ์คํฌ๋กคํ๋ค (ยง4-2 ๋ชฉ๋ก ํ์ด์ง์ ๊ฐ์ ์ฌ์ฌ์ด๋ค).
|
|
650
|
+
|
|
556
651
|
**์ฑ๊ฒฉ์ด ๋จผ์ ๋๋ก ๊ฐ๋ฆฐ๋ค.**
|
|
557
652
|
|
|
558
653
|
| ์ฑ๊ฒฉ | ์ ์ | ์ปดํฌ๋ํธ |
|
|
@@ -690,36 +785,51 @@ SModal.create({ component: OrderModal, componentProps: { orderId } })
|
|
|
690
785
|
|
|
691
786
|
์์ฑ ์ค์ธ ๋ด์ฉ์ด ์์ ๋ ๋ซ๊ธฐ๋ฅผ ์๋ํ๋ฉด ์ดํ ์๋ด๋ฅผ ๋์ฐ๋ ๊ฒ์ **์๋น ์ฑ ๋ชซ**์ด๋ค. ๋์์ธ ์์คํ
์ dirty ์ํ๋ฅผ ์์ง ๋ชปํ๋ฏ๋ก ๋ฐฑ๋๋กญยทESC ๋ฅผ ์ผ๊ด ์ฐจ๋จํ ๋ฟ์ด๋ค. ์๋ด๊ฐ ํ์ํ๋ฉด ์ฑ์ด ์์ฒด dirty ํ์ ํ `SModal.confirm` ์ผ๋ก ๋์ด๋ค.
|
|
692
787
|
|
|
693
|
-
### 3-4. ํ
์ด๋ธ ์ปฌ๋ผ โ
|
|
788
|
+
### 3-4. ํ
์ด๋ธ ์ปฌ๋ผ โ ์ ๋ ฌยท๋๋นยทํค๋
|
|
694
789
|
|
|
695
|
-
####
|
|
790
|
+
#### ์ ๋ ฌ๊ณผ ๋๋น๋ ๊ฐ์ ํ์์ ์ ํ๋ค
|
|
696
791
|
|
|
697
|
-
|
|
698
|
-
์๋ฆฟ์๊ฐ ์ธ๋ก๋ก ๋ง์์ผ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ผ๋ก ๋น๊ตํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
792
|
+
์ปฌ๋ผ์ ์ ์ํ ๋ ์ ๋ ฌ๊ณผ ๋๋น๋ ๋ฐ๋ก ํ๋จํ๋ ๊ฒ์ด ์๋๋ค. ๋ ๋ค **๊ฐ์ ์ฑ๊ฒฉ**์์ ๋์จ๋ค.
|
|
699
793
|
|
|
700
|
-
|
|
794
|
+
์์น ํ ์ค: **๊ธธ์ด๋ฅผ ํ์์ด ์ ํ๋ฉด ๊ณ ์ , ์ฌ์ฉ์๊ฐ ์ ํ๋ฉด ๊ฐ๋ณ.**
|
|
701
795
|
|
|
702
|
-
| ๊ฐ ์ฑ๊ฒฉ | ์ ๋ ฌ | ์ |
|
|
703
|
-
| --- | --- | --- |
|
|
704
|
-
|
|
|
705
|
-
|
|
|
706
|
-
|
|
|
707
|
-
|
|
|
708
|
-
|
|
|
709
|
-
| ์ํ ํ๊ทธยท์์ด์ฝยท์ฒดํฌ๋ฐ์ค ๋ฑ ๊ณ ์ ํญ ์์ | `'center'` | `STag`, `SIcon` |
|
|
796
|
+
| ๊ฐ ์ฑ๊ฒฉ | ์ ๋ ฌ | ๋๋น | ์ |
|
|
797
|
+
| --- | --- | --- | --- |
|
|
798
|
+
| **๊ธ์กยท์๋ยท๊ฐ์ยท๋น์จ** (์์ ๋ํ๋ด๋ ๊ฐ) | **`'right'`** | ๊ณ ์ | `39,000์` ยท `12๊ฐ` ยท `3๊ฑด` ยท `15%` |
|
|
799
|
+
| ์ฝ๋ยท์๋ณ์, ์ ํ๋ฒํธ, ์ผ์ยท์ผ์ | **`'center'`** | ๊ณ ์ | `RV20250728-000010` ยท `010-1234-5678` ยท `2026-08-13` |
|
|
800
|
+
| **๋ซํ ๊ฐ ์งํฉ** (enum ยท ๋ง์คํฐ ๋ชฉ๋ก์์ ๊ณ ๋ฅด๋ ๊ฐ) | **`'center'`** | ๊ณ ์ | ์ํ ยท ์ง๊ธ ยท ๊ณต๊ฐ ๋ฒ์ ยท ๊ณ ์ฉ ํํ ยท ์์ผ |
|
|
801
|
+
| ์ํ ํ๊ทธยท์์ด์ฝยท๋ฒํผยท์ฒดํฌ๋ฐ์ค | `'center'` | ๊ณ ์ (`contentType: 'control'`) | `STag` ยท `SIcon` ยท `SGhostButton` |
|
|
802
|
+
| **ํ
์คํธ** (์ฌ์ฉ์๊ฐ ์์ ์
๋ ฅ) | ์๋ต(๊ธฐ๋ณธ `left`) | ๊ธฐ์ค ํญ + `resizable` | ์ด๋ฆ ยท ๋ชฉํ๋ช
ยท ์ด๋ฉ์ผ ยท ๋ฉ๋ชจ |
|
|
710
803
|
|
|
711
804
|
**์ค์ ์ ๋ ฌ์ `align: 'center'` ๋ฅผ ๋ช
์ํ๋ค.** ๊ธฐ๋ณธ๊ฐ์ด ์ข์ธก์ด๋ผ ์๋ตํ๋ฉด ์ค์์ด ๋์ง ์๋๋ค.
|
|
712
805
|
|
|
806
|
+
##### ํ๋ณ โ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋๊ฐ
|
|
807
|
+
|
|
808
|
+
์ฐ์ธก ์ ๋ ฌ์ ๊ทผ๊ฑฐ๋ "์๋ฆฟ์๋ฅผ ์ธ๋ก๋ก ๋ง์ถฐ ํฌ๊ธฐ๋ฅผ ์ฝ๋๋ค"๋ค. ์๋ฆฟ์ ์ฐจ์ด๊ฐ ๊ฑฐ์ ์๊ณ ๊ฐ๋ผ๋ฆฌ ๋์๋ฅผ ๊ฒฌ์ค ์ผ์ด ์์ผ๋ฉด ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ด๋ ์ฐ์ธก ์ ๋ ฌํ์ง ์๋๋ค โ ์ก์ฅ๋ฒํธ `123456789` ๋ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๊ฐ์ด ์๋๋ค.
|
|
809
|
+
|
|
810
|
+
##### ํ๋ณ โ ๊ฐ ์งํฉ์ด ๋ซํ ์๋๊ฐ
|
|
811
|
+
|
|
812
|
+
**๋ซํ ๊ฐ ์งํฉ์ด๋ฉด ํ๊ทธ๋ก ๊ทธ๋ฆฌ๋ ๋งจ ํ
์คํธ๋ก ๊ทธ๋ฆฌ๋ `center` ๋ค.** ํ๋ณ ์ง๋ฌธ ํ๋ โ *์ฌ์ฉ์๊ฐ ๊ทธ ์นธ์ ์ง์ ์น๋ ๊ฐ์ธ๊ฐ?* ์๋๋ฉด ๋ซํ ์งํฉ์ด๋ค.
|
|
813
|
+
|
|
814
|
+
| | ๊ฐ์ ์ถ์ฒ | ์ ๋ ฌ | ์ |
|
|
815
|
+
| --- | --- | --- | --- |
|
|
816
|
+
| **๋ซํ** | enum ยท ๋ง์คํฐ ๋ชฉ๋ก์์ ์ ํ (`SSelect` ์ `options` ์์ ์ค๋ ๊ฐ) | `center` | ์ง๊ธ ยท ์ํ ยท ๊ณต๊ฐ ๋ฒ์ ยท ์ต์ข
๋ฑ๊ธ ยท ๊ณ ์ฉ ํํ ยท ์์ผ |
|
|
817
|
+
| **์ด๋ฆผ** | ์ฌ์ฉ์๊ฐ ์์ ์
๋ ฅ (์์ ์
๋ ฅ ํ๋์์ ์ค๋ ๊ฐ) | `left` | ์ด๋ฆ ยท ๋ชฉํ๋ช
ยท ์ด๋ฉ์ผ ยท ๋ฌธํญ ๊ทธ๋ฃน๋ช
|
|
|
818
|
+
|
|
819
|
+
- **๋ฌด์์ผ๋ก ๊ทธ๋ ธ๋์ง๋ก ๊ฐ๋ฅด์ง ์๋๋ค.** ๊ฐ์ ์ฑ๊ฒฉ์ ๊ฐ์ด `STag` ๋ฉด `center`, ๋งจ ํ
์คํธ๋ฉด `left` ๊ฐ ๋๋ฉด ํ ํ
์ด๋ธ ์์์ ๊ธฐ์ค์ด ์ด๊ธ๋๋ค.
|
|
820
|
+
- **๊ธธ์ด๋ก๋ ๊ฐ๋ฅด์ง ์๋๋ค.** "์งง์ ๋ผ๋ฒจ์ด๋ฉด center" ๊ฐ์ ๋จ์๋ฅผ ๋ถ์ด๋ฉด `ํ๋ก๋ํธ๋์์ธํ`(8์)์ฒ๋ผ ๊ฒฝ๊ณ์ ๊ฑธ๋ฆฌ๋ ๊ฐ์์ ๋งค๋ฒ ํ๋จ์ด ๊ฐ๋ฆฐ๋ค.
|
|
821
|
+
- ํ ์ด์ ํ
์คํธ์ ํ๊ทธ๊ฐ ํจ๊ป ์ค๋ฉด ํ๊ทธ ๊ธฐ์ค(`center`)์ ๋ง์ถ๋ค.
|
|
822
|
+
|
|
713
823
|
```tsx
|
|
714
824
|
const columns: STableColumn[] = [
|
|
715
|
-
{ name: 'orderNo', label: '์ฃผ๋ฌธ๋ฒํธ', field: 'orderNo', width:
|
|
716
|
-
{ name: 'orderedAt', label: '์ฃผ๋ฌธ์ผ์', field: 'orderedAt', width:
|
|
717
|
-
{ name: 'name', label: '์ํ๋ช
', field: 'name' },
|
|
718
|
-
{ name: 'qty', label: '์๋', field: 'qty', width:
|
|
825
|
+
{ name: 'orderNo', label: '์ฃผ๋ฌธ๋ฒํธ', field: 'orderNo', width: 140, align: 'center' },
|
|
826
|
+
{ name: 'orderedAt', label: '์ฃผ๋ฌธ์ผ์', field: 'orderedAt', width: 100, align: 'center' },
|
|
827
|
+
{ name: 'name', label: '์ํ๋ช
', field: 'name', width: 240 }, // ์์ ์
๋ ฅ โ ์๋ต
|
|
828
|
+
{ name: 'qty', label: '์๋', field: 'qty', width: 80, align: 'right',
|
|
719
829
|
format: (v: number) => `${Number(v).toLocaleString()}๊ฐ` },
|
|
720
|
-
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width:
|
|
830
|
+
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width: 120, align: 'right',
|
|
721
831
|
format: (v: number) => `${Number(v).toLocaleString()}์` },
|
|
722
|
-
{ name: 'status', label: '์ํ', field: 'status', width:
|
|
832
|
+
{ name: 'status', label: '์ํ', field: 'status', width: 100, align: 'center',
|
|
723
833
|
render: () => <STag size="sm" color="green" label="ํ๋งค์ค" /> },
|
|
724
834
|
];
|
|
725
835
|
```
|
|
@@ -727,38 +837,73 @@ const columns: STableColumn[] = [
|
|
|
727
837
|
- `format` ์ผ๋ก ๋จ์๋ฅผ ๋ถ์ด๋๋ผ๋ **์์ ๋ํ๋ด๋ฉด ์ค๋ฅธ์ชฝ ์ ๋ ฌ**์ด๋ค. ๋จ์ ๋๋ฌธ์ ๋ฌธ์์ด์ด ๋๋ ๊ฒ์ ์ ๋ ฌ ํ๋จ๊ณผ ๋ฌด๊ดํ๋ค.
|
|
728
838
|
- ์์ ๋ํ๋ด๋ ์ซ์๋ ยง1-4 ๋๋ก **`toLocaleString()` ์ด ํ์**๋ค. ์ธ ์๋ฆฌ ์ฝค๋ง ์์ด ์ถ๋ ฅํ์ง ์๋๋ค.
|
|
729
839
|
- **๋ฒํธยท์ฝ๋์๋ ์ธ ์๋ฆฌ ์ฝค๋ง๋ฅผ ๋ฃ์ง ์๋๋ค.** ์ก์ฅ๋ฒํธ `123456789` ๋ฅผ `123,456,789` ๋ก ํ์ํ๋ฉด ๊ฐ ์์ฒด๊ฐ ๋ฌ๋ผ ๋ณด์ธ๋ค.
|
|
840
|
+
- ๋ ์ง๋ ยง1-4 ๋๋ก `YYYY-MM-DD` ๋ก ์ ๋๋ค. ์๋ฆฟ์๊ฐ ๊ณ ์ ์ด๋ผ ํญ์ ํ์์ผ๋ก ๊ณ์ฐํ ์ ์๋ค.
|
|
730
841
|
- **ํค๋๋ ๊ฐ์ด๋ฐ, ์
๋ง ์ฐ์ธก**์ผ๋ก ๋๋ ค๋ฉด `align` ์ด ์๋๋ผ `tdClass` ๋ฅผ ์ด๋ค. `align` ์ `<th>` ์ `<td>` ์ ํจ๊ป ์ ์ฉ๋๋ค.
|
|
731
842
|
|
|
732
843
|
```tsx
|
|
733
|
-
{ name: 'views', label: '์กฐํ์', field: 'views', align: 'center', tdClass: 'text-right!',
|
|
844
|
+
{ name: 'views', label: '์กฐํ์', field: 'views', align: 'center', width: 100, tdClass: 'text-right!',
|
|
734
845
|
format: (v: number) => Number(v).toLocaleString() },
|
|
735
846
|
```
|
|
736
847
|
|
|
737
848
|
- `SKeyValueTable` ์ ๊ฐ ์
๋ ๊ฐ์ ๊ธฐ์ค์ ๋ฐ๋ฅธ๋ค.
|
|
738
849
|
|
|
739
|
-
####
|
|
850
|
+
#### ๋๋น๋ px ๋ก๋ง ์ค๋ค
|
|
740
851
|
|
|
741
|
-
|
|
852
|
+
**์ปฌ๋ผ ํญ์ px ์ด๋ค.** ์ซ์๋ฅผ ์ฃผ๋ฉด px ๋ก ์ฝ๊ณ , ๋ฌธ์์ด์ `'120px'` ํํ๋ง ๋ฐ๋๋ค. `%` ยท `clamp()` ยท `min()` ์ ์ฐ์ง ์๋๋ค.
|
|
742
853
|
|
|
743
|
-
-
|
|
744
|
-
|
|
854
|
+
์ปฌ๋ผ ํญ์ `<colgroup>` ์ `<col width>` ๋ก ๋ค์ด๊ฐ๊ณ ํ
์ด๋ธ์ด `table-fixed` ๋ผ, ํจ์ํ ๊ฐ์ ๊ณ์ฐ๋์ง ์๊ณ ํต์งธ๋ก ๋ฌด์๋ ๋ค auto ํญ์ผ๋ก ๋จ์ด์ง๋ค. `'30%'` ๋ ๋ ๋์๊ฒ `30`(px)์ผ๋ก ์ฝํ๋ค. **๋ ๋ค ์๋ฌ ์์ด ํ๋ฉด๋ง ํ์ด์ง๋ค.**
|
|
855
|
+
|
|
856
|
+
- **๋ด์ฉ์ด ๋ค์ด๊ฐ๋ ์ด์ ์ ๋ถ ํญ์ ๋ช
์ํ๋ค.** ์๋ตํ๋ฉด ๊ธฐ๋ณธ 120px ์ด ์กฐ์ฉํ ๋ค์ด๊ฐ๊ณ , "์งง์ ์ด์ด๋ผ ๊ทธ๋๋ก ๋ ๊ฒ"๊ณผ "ํ๋จ์ ๋น ๋จ๋ฆฐ ๊ฒ"์ด ๊ตฌ๋ถ๋์ง ์๋๋ค. 120px ์ด ๋ง๋๋ผ๋ `width: 120` ์ ์ ๋๋ค.
|
|
857
|
+
- **`autoWidth` ๋ ๋จ์ ํญ์ ํก์ํ๋ ์คํ์ด์ ์ด ํ๋์๋ง ์ด๋ค.** ๋ด์ฉ์ด ๋ค์ด๊ฐ๋ ์ด์๋ ์ฐ์ง ์๋๋ค โ ํญ์ด ๋ค๋ฅธ ์ด์ ์ข์ฐ๋ผ ํ๋ฉด๋ง๋ค ๋ฌ๋ผ์ง๋ค. ์คํ์ด์ ์ด์ ๊ฐ์ ๊ทธ๋ฆฌ์ง ์์ผ๋ฏ๋ก `field` ๋ ์๋ตํ๋ค.
|
|
858
|
+
|
|
859
|
+
```tsx
|
|
860
|
+
{ name: 'spacer', label: '', autoWidth: true },
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
- **`minWidth` ยท `maxWidth` ๋ `resizable` ์์ก์ด์ ์ด๋ ๋ฒ์์ผ ๋ฟ, ๋ ์ด์์์๋ ๊ด์ฌํ์ง ์๋๋ค.** ํญ์ ์ฃผ์ง ์์ ์ด์ด ์ด ๊ฐ ์์์ ์กํ๋ ๊ฒ์ด ์๋๋ค.
|
|
864
|
+
- **๊ณ ์ ํญ ํฉ์ด ์ต์ ์ฐฝ ํญ์ ๋์ผ๋ฉด ๊ฐ๋ก ์คํฌ๋กค์ด ๋๋ค.** `STable` ์ด ์๊ธฐ ์์์ ๊ฐ๋ก๋ก ์คํฌ๋กคํ๊ณ ํค๋ยท๋ฐ๋๊ฐ ํจ๊ป ์์ง์ด๋ฏ๋ก ๋ณ๋ ์กฐ์น๋ ํ์ ์๋ค โ ํญ์ ์ค์ฌ ๋ง์ถ์ง ๋ง๊ณ , ์ด์ด ์ ๋ง ๊ทธ๋งํผ ํ์ํ์ง๋ฅผ ๋ณธ๋ค.
|
|
865
|
+
|
|
866
|
+
##### ๊ณ ์ ํญ์ ์ด๋ป๊ฒ ์ ํ๋๊ฐ
|
|
867
|
+
|
|
868
|
+
```text
|
|
869
|
+
ํญ = ceil( ( max(๊ฐ ํญ + ๊ฐ ๊ธฐ์ค ํจ๋ฉ, ํค๋ ํญ + 32) + ์ฌ์ ) / 8 ) ร 8
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
- **๊ฐ๊ณผ ํค๋๋ฅผ ๋ฐ๋ก ๊ณ์ฐํด ํฐ ์ชฝ์ ์ด๋ค.** `contentType: 'control'` ์ `<td>` ์๋ง ์ ์ฉ๋๊ณ `<th>` ๋ ํญ์ ํ
์คํธ ํจ๋ฉ์ด๋ผ, ์งง์ ์ปจํธ๋กค + ๊ธด ํค๋ ์กฐํฉ์์ ํค๋๊ฐ ์๋ฆฐ๋ค.
|
|
745
873
|
- ๊ฐ์ ๋ฐ๋ผ ํญ์ด ๋ฌ๋ผ์ง๋ ์์(`STag` ๋ผ๋ฒจ, ๋ผ๋ฒจ ์๋ ๋ฒํผ)๋ **๊ฐ์ฅ ๊ธด ๊ฐ** ๊ธฐ์ค์ผ๋ก ์ก๋๋ค. `ํ๋งค์ค` ์ ๋ง์ถฐ๋๋ฉด `ํ๋งค์ค์ง ์์ฒญ` ์์ ์๋ฆฐ๋ค.
|
|
874
|
+
- **์ ๋ ฌ ๊ฐ๋ฅํ ํค๋(`sortable`)๋ ์์ด์ฝ ๋ฒํผ + ๊ฐ๊ฒฉ๋งํผ `+20px` ๋ ๋ ๋ค.** `helpText` ๋ฅผ ํจ๊ป ๋ฌ๋ฉด ๊ทธ๋งํผ ๋ ๋ํ๋ค.
|
|
875
|
+
- **`editable` ยท `navigable` ํ์๊ณผ `required` ํ์(`*`) ๋ ๊ฐ๊ฐ ํญ์ ๋จน๋๋ค.** ํค๋์ ๋ถ๋ ๊ฒ์ด ๋์๋ก **๋ผ๋ฒจ์ด ๋จผ์ ์๋ฆฌ๋ฏ๋ก**, ๋ถ์ธ ์ด์ ํญ์ ํจ๊ป ๋ํ๋ค.
|
|
876
|
+
- **๊ณ์ฐ๊ฐ์ ํฝ์
๋จ์๊น์ง ๋ง์ถ๋ฉด ์ด๊ธ๋๋ค** โ ์๋ธํฝ์
๋ฐ์ฌ๋ฆผ ๋๋ฌธ์ด๋ค. ์ฌ์ 8px ์ ์น๊ณ 8 ๋จ์๋ก ์ฌ๋ฆผํ๋ค.
|
|
877
|
+
- ์ข์ฐ ํจ๋ฉ์ `STable` ์ด ํ ํฐ์ผ๋ก ๋ฃ์ผ๋ฏ๋ก ์ง์ ์ฃผ์ง ์๋๋ค. ๊ทธ๋งํผ์ ๋บ ๋๋จธ์ง๊ฐ ์์ ๋ชซ์ด๋ผ๋ ์ ๋ง ๊ณ์ฐ์ ๋ฃ๋๋ค.
|
|
878
|
+
|
|
879
|
+
#### ์ปจํธ๋กค์ด ๋ค์ด๊ฐ๋ ์ปฌ๋ผ
|
|
880
|
+
|
|
881
|
+
`<td>` ๋ ํญ์ ๋๋ ๋ด์ฉ์ ์๋ผ๋ธ๋ค(`overflow: hidden`). ํ
์คํธ๋ผ๋ฉด ๋ง์ค์์ผ๋ก ๋๋์ง๋ง, ์
์ `STag` ยท `SButton` ยท `SGhostButton` ยท `SSelect` ยท `SInput` ยท `SNumberInput` ์ฒ๋ผ **์๊ธฐ ํญ์ ๊ฐ์ง ์์**๋ฅผ ๋ฃ์ผ๋ฉด ์์ ์์ฒด๊ฐ ์๋ ค **๋๋ฅด๊ฑฐ๋ ์ฝ๊ฑฐ๋ ์
๋ ฅํ ์ ์๊ฒ ๋๋ค.**
|
|
882
|
+
|
|
883
|
+
- **์ปจํธ๋กค์ด ๋ค์ด๊ฐ๋ ์ปฌ๋ผ์๋ `contentType: 'control'` ์ ํจ๊ป ์ค๋ค.** ์ข์ฐ ํจ๋ฉ์ด ํ
์คํธ์ฉ(๋๊ฒ)์์ ์ปจํธ๋กค์ฉ(์ข๊ฒ)์ผ๋ก ๋ฐ๋์ด, ๊ฐ์ ์ปฌ๋ผ ํญ์์๋ ์์๊ฐ ์ธ ํญ์ด ๋์ด์ง๋ค. ๊ธฐ๋ณธ๊ฐ์ `text` ๋ค.
|
|
884
|
+
- ์์๊ฐ ๋ ์ด์์ด๋ฉด ์์ ํญ์ ํฉ์ **`gap` ๊น์ง** ๋ํ๋ค (ํ ๋ด๋ถ ์ธ๋ผ์ธ ์ก์
๊ฐ๊ฒฉ์ `gap-sd-4` ๊ณ ์ , ยง3-5-5).
|
|
746
885
|
- `SSelect` ยท `SInput` ์ฒ๋ผ ์
ํญ์ ์ฑ์ฐ๋ ์ปจํธ๋กค์ **์ปฌ๋ผ ํญ์ด ๊ณง ์ปจํธ๋กค ํญ**์ด๋ค. ์ค์ ์ ํ๊ฐยท์
๋ ฅ๊ฐ์ด ๋ง์ค์ ์์ด ์ฝํ๋ ํญ์ธ์ง ํ์ธํ๋ค.
|
|
747
886
|
- ํญ์ ๋๋ํ ์ค ์ ์๋ ์๋ฆฌ๋ ํญ์ ์ค์ด๋ ๊ฒ ์๋๋ผ **์์๋ฅผ ๋ฐ๊พผ๋ค** โ ๋ผ๋ฒจ ๋ฒํผ ๋์ ์์ด์ฝ๋ง ์๋ `SGhostButton`, `size="xs"` (ยง3-5-2, ยง3-5-5).
|
|
748
|
-
|
|
887
|
+
|
|
888
|
+
```tsx
|
|
889
|
+
{ name: 'normal', label: '์ ์', field: 'normal', width: 96,
|
|
890
|
+
align: 'center', contentType: 'control', render: row => <SNumberInput โฆ /> },
|
|
891
|
+
```
|
|
892
|
+
|
|
893
|
+
**์
์ข์ฐ ์ฌ๋ฐฑ์ ๋ด์ฉ์ด ์ ํ๋ค.** ํ
์คํธ๋ ๋๊ฒ, ์ปจํธ๋กค์ ์ข๊ฒ๋ค โ `SKeyValueTable` ์ `field.type` ์ผ๋ก ์ด ํ์ ์ ์ค์ค๋ก ํ์ง๋ง, `STable` ์ ์
์ ์๋น ์ฑ์ด ๋๊ธด ์์์ `render` ๊ฒฐ๊ณผ๋ผ ์ปดํฌ๋ํธ๊ฐ ์ ์ ์๋ค. ๊ทธ๋์ `contentType` ์ผ๋ก ์๋ ค์ค๋ค. ์ฌ๋ฐฑ ๊ฐ ์์ฒด๋ ํ ํฐ์ด ์ ํ๋ฏ๋ก `tdClass` ๋ก ํจ๋ฉ์ ์ง์ ๋ฎ์ด์ฐ์ง ์๋๋ค.
|
|
749
894
|
|
|
750
895
|
**`resizable` ํ
์ด๋ธ์ด๋ฉด `minWidth` ๋ฅผ ํจ๊ป ์ค๋ค.** resize ํํ ๊ธฐ๋ณธ๊ฐ์ ์ด๋ค ์ปจํธ๋กค๋ ๋ด์ง ๋ชปํ ๋งํผ ์์, ์ฌ์ฉ์๊ฐ ๋๊น์ง ๋๋ฉด ๊ทธ๋๋ก ์๋ฆฐ๋ค. `width` ๋ฅผ ์ ํ ๊ทผ๊ฑฐ์ ๊ฐ์ ๊ฐ์ ํํ์ผ๋ก ๋๋ค โ ํ
์คํธ ์ปฌ๋ผ๊ณผ ๋ฌ๋ฆฌ ์ฌ๊ธฐ์๋ ๋ ์ค์ผ ์ฌ์ง๊ฐ ์๋ค.
|
|
751
896
|
|
|
752
897
|
```tsx
|
|
753
898
|
const columns: STableColumn[] = [
|
|
754
899
|
// ํ๊ทธ โ ๊ฐ์ฅ ๊ธด ๋ผ๋ฒจ ๊ธฐ์ค
|
|
755
|
-
{ name: 'status', label: '์ํ', field: 'status', width:
|
|
900
|
+
{ name: 'status', label: '์ํ', field: 'status', width: 120, minWidth: 120, align: 'center',
|
|
756
901
|
render: (row: SRow) => <STag size="sm" color="green" label={row.statusLabel} /> },
|
|
757
902
|
// ์
์ ์
๋ ฅ โ ์ปฌ๋ผ ํญ์ด ๊ณง ์
๋ ฅ ํญ
|
|
758
|
-
{ name: 'qty', label: '์๋', field: 'qty', width:
|
|
903
|
+
{ name: 'qty', label: '์๋', field: 'qty', width: 100, minWidth: 100, align: 'right',
|
|
759
904
|
render: (row: SRow) => <SNumberInput value={row.qty} onValueChange={v => setQty(row, v)} /> },
|
|
760
905
|
// ์ธ๋ผ์ธ ์ก์
๋ โ ํญ = xs ๋ฒํผ 2๊ฐ + gap-sd-4 + ์
์ข์ฐ ํจ๋ฉ
|
|
761
|
-
{ name: 'actions', label: '', field: 'id', width:
|
|
906
|
+
{ name: 'actions', label: '', field: 'id', width: 84, minWidth: 84, align: 'center',
|
|
762
907
|
render: (row: SRow) => (
|
|
763
908
|
<div className="flex items-center justify-center gap-sd-4">
|
|
764
909
|
<SGhostButton size="xs" intent="action" icon="edit" ariaLabel="์์ " onClick={() => editRow(row)} />
|
|
@@ -766,11 +911,34 @@ const columns: STableColumn[] = [
|
|
|
766
911
|
</div>
|
|
767
912
|
) },
|
|
768
913
|
|
|
769
|
-
// โ ์ปจํธ๋กค ์ปฌ๋ผ์ width ์๋ต โ ๊ธฐ๋ณธ
|
|
914
|
+
// โ ์ปจํธ๋กค ์ปฌ๋ผ์ width ์๋ต โ ๊ธฐ๋ณธ ํญ(120px)์ ๋งก๊ธฐ๋ฉด ๋ฒํผ์ด ์๋ฆฐ๋ค
|
|
770
915
|
{ name: 'move', label: '', field: 'id', render: () => <SButton label="์ฌ๊ณ ์ด๋" size="xs" /> },
|
|
771
916
|
];
|
|
772
917
|
```
|
|
773
918
|
|
|
919
|
+
#### ์ ๋ ฌ ๊ฐ๋ฅํ ์ปฌ๋ผ
|
|
920
|
+
|
|
921
|
+
**์ ๋ ฌ ์ํ๋ `STable` ์ด ๊ฐ์ง ์๋๋ค.** ์ปฌ๋ผ์ `sortable: true` ๋ฅผ ์ฃผ๊ณ , ํ์ด์ง๊ฐ `sort` ยท `onSortChange` ๋ก ์ํ๋ฅผ ๋ค๊ณ ์๋๋ค.
|
|
922
|
+
|
|
923
|
+
```tsx
|
|
924
|
+
const [sort, setSort] = useState<STableSort | null>({ name: 'orderedAt', dir: 'desc' });
|
|
925
|
+
|
|
926
|
+
<STable
|
|
927
|
+
columns={columns}
|
|
928
|
+
rows={rows}
|
|
929
|
+
sort={sort}
|
|
930
|
+
onSortChange={setSort}
|
|
931
|
+
/>
|
|
932
|
+
```
|
|
933
|
+
|
|
934
|
+
- **์ ๋ ฌ์ ์กฐํ ์กฐ๊ฑด์ด๋ค.** ์๋ฒ ์ ๋ ฌ์ด๋ฉด `?sort=createdAt&dir=desc` ๊ฐ ๊ณง ์์ฒญ์ด๊ณ , ๋ค๋ก๊ฐ๊ธฐยท์๋ก๊ณ ์นจยท๋งํฌ ๊ณต์ ๋ก ๋ณต์๋ผ์ผ ํ๋ค. ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ณธ์ ๋ค๋ฉด URL ๊ณผ ํ๋ฉด์ด ์ด๊ธ๋๋ค โ `SExpansionList` ์ ์ ํ์ ์ฑ์ด ๋๋ ๊ฒ๊ณผ ๊ฐ์ ์ด์ ๋ค (ยง3-7-7).
|
|
935
|
+
- **ํ์ ์ค์ ๋ก ์ ๋ ฌํ๋ ๊ฒ๋ ํ์ด์ง ๋ชซ์ด๋ค.** `STable` ์ ๋ฐ์ ์์๋๋ก ๊ทธ๋ฆฐ๋ค.
|
|
936
|
+
- **๋์** โ ํค๋ ํด๋ฆญ ์ `asc โ desc โ ํด์ ` 3๋จ. ๋ค๋ฅธ ์ด์ ๋๋ฅด๋ฉด ๊ทธ ์ด์ `asc` ๋ก ์์ํ๋ค. ํด์ ๋๋ฉด `onSortChange(null)`.
|
|
937
|
+
- **์์ด์ฝ** โ ๋ฏธ์ ๋ ฌ `updown`, ์ค๋ฆ `arrowUp`, ๋ด๋ฆผ `arrowDown`. ์ ๋ ฌ ์ค์ธ ์ด๋ง `action` ์์ผ๋ก ์ฌ๋ผ์จ๋ค. `SGhostButton size="xxs"` ๋ก ๊ทธ๋ ค์ง๋ฏ๋ก ์ง์ ๋ง๋ค์ง ์๋๋ค.
|
|
938
|
+
- **ํด๋ฆญ ์์ญ์ ์ ๋ ฌ ๋ฒํผ๋ฟ์ด๋ค.** ํค๋ ์
์ ์ฒด๋ฅผ ๋๋ฅด๊ฒ ํ์ง ์๋๋ค โ ๋ผ๋ฒจ์ ๋๋๊ทธํด ๊ณ ๋ฅด๊ฑฐ๋ `helpText` ์์ด์ฝ์ hover ํ๋ ๊ฒ๊ณผ ๋ค์์ธ๋ค.
|
|
939
|
+
- **๋ค์ค ์ ๋ ฌ์ ์ง์ํ์ง ์๋๋ค.** ํ ๋ฒ์ ํ ์ด์ด๋ค.
|
|
940
|
+
- `renderHeader` ๋ก ํค๋๋ฅผ ํต์งธ๋ก ๊ต์ฒดํ๋ฉด ์ ๋ ฌ ์์ด์ฝ๋ ํด๋ฆญ๋ ๊ทธ๋ฆฌ์ง ์๋๋ค โ ํค๋ ์ ์ฒด๊ฐ ์๋น ์ฑ ์ฑ
์์ด ๋๋ค.
|
|
941
|
+
|
|
774
942
|
#### ๊ฐ์ด ์๋ ์
์ ํ์ ํ์ดํ
|
|
775
943
|
|
|
776
944
|
์
์ **๋น์นธ์ผ๋ก ๋์ง ์๋๋ค.** ๊ฐ์ด `null` ยท `undefined` ยท ๋น ๋ฌธ์์ด์ด๋ฉด `-` ๋ฅผ `text-fg-tertiary`(`grey_65`)๋ก ํ์ํ๋ค.
|
|
@@ -782,9 +950,9 @@ const emptyCell = <span className="text-fg-tertiary">-</span>;
|
|
|
782
950
|
const hasValue = (v: unknown) => v !== null && v !== undefined && v !== '';
|
|
783
951
|
|
|
784
952
|
const columns: STableColumn[] = [
|
|
785
|
-
{ name: 'memo', label: '๋ฉ๋ชจ', field: 'memo',
|
|
953
|
+
{ name: 'memo', label: '๋ฉ๋ชจ', field: 'memo', width: 240,
|
|
786
954
|
render: (row: SRow) => (hasValue(row.memo) ? row.memo : emptyCell) },
|
|
787
|
-
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width:
|
|
955
|
+
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width: 120, align: 'right',
|
|
788
956
|
render: (row: SRow) =>
|
|
789
957
|
hasValue(row.price) ? `${Number(row.price).toLocaleString()}์` : emptyCell },
|
|
790
958
|
];
|
|
@@ -792,6 +960,54 @@ const columns: STableColumn[] = [
|
|
|
792
960
|
|
|
793
961
|
`0` ์ ๊ฐ์ด ์๋ ๊ฒ์ด๋ฏ๋ก ํ์ดํ์ผ๋ก ๋ฐ๊พธ์ง ์๋๋ค โ `0์` ๊ทธ๋๋ก ํ์ํ๋ค.
|
|
794
962
|
|
|
963
|
+
#### ๋ผ๋ฒจ๋ง์ผ๋ก ๋ป์ด ์ ํตํ๋ ์ปฌ๋ผ์ `helpText`
|
|
964
|
+
|
|
965
|
+
ํค๋ ๋ผ๋ฒจ์ ์ปฌ๋ผ ํญ ์์ ๋ค์ด๊ฐ์ผ ํด์ ์งง์์ง๋ค. **์ฐ์ถ ๊ธฐ์คยท๋จ์ยท์ํ ๊ฐ์ ๋ป์ฒ๋ผ ๋ผ๋ฒจ์ ๋ด๊ธฐ์ง ์๋ ์ค๋ช
์ `column.helpText` ๋ก ์ค๋ค** โ ๋ผ๋ฒจ ๋ค์ ๋์๋ง ์์ด์ฝ์ด ๋ถ๊ณ hover ํ๋ฉด ํดํ์ด ๋ฌ๋ค. ๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ์ด ํ ์ค์ด๋ค. `SKeyValueTable` ์ `field.helpText`, `SSectionHeaderCard` ์ `helpText` ์ ๊ฐ์ ๊ฒ์ด๋ค.
|
|
966
|
+
|
|
967
|
+
ํ๋จ ๊ธฐ์ค ํ ์ค: *์ปฌ๋ผ ์ ๋ชฉ์ด ์ค์๋งยท์ฌ๋ด ์ฉ์ดยท๊ณ์ฐ์์ด๊ฑฐ๋, ๊ฐ์ด ์๋๋ผ ์ด ์์ฒด์ ์ค๋ช
์ด ํ์ํ ๋ ํค๋์ ๋จ๋ค.*
|
|
968
|
+
|
|
969
|
+
```tsx
|
|
970
|
+
const columns: STableColumn[] = [
|
|
971
|
+
{ name: 'orderCount', label: '์ฃผ๋ฌธ ์', field: 'orderCount', width: 120, align: 'right',
|
|
972
|
+
helpText: ['์ทจ์ยท๋ฐํ์ ์ ์ธํ ํ์ ์ฃผ๋ฌธ ์์
๋๋ค.'],
|
|
973
|
+
format: (v: number) => `${Number(v).toLocaleString()}๊ฑด` },
|
|
974
|
+
{ name: 'status', label: '์ํ', field: 'status', width: 100, align: 'center',
|
|
975
|
+
helpText: ['ํ์ฑ: ์ต๊ทผ 30์ผ ๋ด ์ฃผ๋ฌธ ์์', '๋ณด๊ด๋จ: ๊ฑฐ๋ ์ข
๋ฃ'] },
|
|
976
|
+
];
|
|
977
|
+
```
|
|
978
|
+
|
|
979
|
+
- **`renderHeader` ๋ก ํค๋๋ฅผ ์ง์ ๋ง๋ค์ด `STooltip` ์ ๋ถ์ด์ง ์๋๋ค.** `renderHeader` ๋ ํค๋ ์ ์ฒด๋ฅผ ๊ต์ฒดํ๋ฏ๋ก `helpText` ๊ฐ ๋ฌด์๋๊ณ , ์์ด์ฝยทํฌ๊ธฐยท์ยท๊ฐ๊ฒฉ์ ์์ผ๋ก ๋ง์ถ๊ฒ ๋๋ค.
|
|
980
|
+
- **๋ชจ๋ ์ปฌ๋ผ์ ๋ฌ์ง ์๋๋ค.** ๋ผ๋ฒจ๋ก ๋ป์ด ํตํ๋ ์ปฌ๋ผ(`์ฃผ๋ฌธ๋ฒํธ`ยท`์ํ๋ช
`)๊น์ง ๋ถ์ด๋ฉด ํค๋๊ฐ ์์ด์ฝ์ผ๋ก ๋ค๋ฎ์ฌ ์ ์ ์ค๋ช
์ด ํ์ํ ์ปฌ๋ผ์ด ๋ฌปํ๋ค.
|
|
981
|
+
- ๊ธด ๋ฌธ์ฅ์ ๋ฃ๋ ์๋ฆฌ๊ฐ ์๋๋ค. ํ ์ค์ ํ ๊ฐ์ง ์ฌ์ค๋ง ๋ด๊ณ , ๊ทธ ์ด์์ ํ์ด์ง ์๋จ ์๋ด(`SCallout`)๋ก ๋บ๋ค.
|
|
982
|
+
- ์์ด์ฝ๋ ํญ์ ๋จน๋๋ค โ ํค๋ ํญ ๊ณ์ฐ์ ๋ฃ๋๋ค.
|
|
983
|
+
|
|
984
|
+
#### ํค๋์ ๋ถ๋ ๊ฒ๋ค์ ์์ ยท ์ด์ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง ์๋ฆฌ๋ ํ์
|
|
985
|
+
|
|
986
|
+
ํค๋ ๋ผ๋ฒจ ๋ค์ ๋ถ๋ ๊ฒ์ ๋ค ๊ฐ์ง๊ณ , **์์๋ `STable` ์ด ๊ณ ์ ํ๋ค.** ์๋น ์ฑ์ด ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ค.
|
|
987
|
+
|
|
988
|
+
```text
|
|
989
|
+
๋ผ๋ฒจ [helpText ?] [editable] [navigable] [required *] [sortable ์ ๋ ฌ๋ฒํผ]
|
|
990
|
+
```
|
|
991
|
+
|
|
992
|
+
**`editable` ์ ๊ฐ์ ์ง์ ๊ณ ์น ์ ์๋ ์ด, `navigable` ์ ๋๋ฌ์ ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๋ ์ด์ ์ค๋ค.** ๋ ๋ค **ํ์์ผ ๋ฟ ๋ฒํผ์ด ์๋๋ค** โ ์์ด์ฝยทํฌ๊ธฐยท์์ ์ปดํฌ๋ํธ๊ฐ ๊ณ ์ ํ๊ณ ํด๋ฆญ์ ๋ฐ์ง ์๋๋ค.
|
|
993
|
+
|
|
994
|
+
```tsx
|
|
995
|
+
const columns: STableColumn[] = [
|
|
996
|
+
{ name: 'name', label: '์ํ๋ช
', field: 'name', width: 200,
|
|
997
|
+
navigable: true,
|
|
998
|
+
render: (row: SRow) => <STextLink label={row.name} onClick={() => goDetail(row.id)} /> },
|
|
999
|
+
{ name: 'stock', label: '์ฌ๊ณ ', field: 'stock', width: 160, contentType: 'control',
|
|
1000
|
+
editable: true, required: true,
|
|
1001
|
+
render: (row: SRow) => <SNumberInput value={row.stock} width="100%" /> },
|
|
1002
|
+
];
|
|
1003
|
+
```
|
|
1004
|
+
|
|
1005
|
+
- **์ค์ ๋ก ๊ทธ๋ ๊ฒ ๋์ํ๋ ์ด์๋ง ์ผ ๋ค.** ํ์๋ง ์ผ๊ณ ์
์ ํ
์คํธ ๊ทธ๋๋ก ๋๋ฉด, ๊ณ ์น ์ ์๋ค๊ณ ํด ๋๊ณ ๊ณ ์น ๋ฐฉ๋ฒ์ด ์๊ณ ๋์ด๊ฐ ์ ์๋ค๊ณ ํด ๋๊ณ ๋๋ฅผ ๊ฒ์ด ์๋ค. `editable` ์ด๋ฉด ์
์ ์
๋ ฅ ์ปจํธ๋กค์ด, `navigable` ์ด๋ฉด ์
์ ๋งํฌยทํด๋ฆญ์ด ์์ด์ผ ํ๋ค.
|
|
1006
|
+
- **ํ์์ผ๋ก ๋์์ ๋์ ํ์ง ์๋๋ค.** ๊ณ ์น๋ UI ๋ ๋์ด๊ฐ๋ ๋์๋ ์
(`column.render`) ๋ชซ์ด๋ค.
|
|
1007
|
+
- **`renderHeader` ๋ก ํค๋๋ฅผ ํต์งธ๋ก ๊ต์ฒดํ๋ฉด ํ์๋ `required` ๋ ๊ทธ๋ ค์ง์ง ์๋๋ค** โ ํค๋ ์ ์ฒด๊ฐ ์๋น ์ฑ ์ฑ
์์ด ๋๋ฏ๋ก ์์ยทํฌ๊ธฐยท์์ ์์ผ๋ก ๋ง์ถ๊ฒ ๋๋ค.
|
|
1008
|
+
|
|
1009
|
+
**๊ฐ์ ๋ฐ๋์ ์ฑ์์ผ ํ๋ ์ด์๋ `column.required`** ๋ฅผ ์ค๋ค โ ๋ผ๋ฒจ ๋ค์ `*` ๊ฐ ๋ถ๋๋ค. `SKeyValueTable` ์ `field.required` ์ ๊ฐ์ ๊ฒ์ด๋ค. **์ฝ๊ธฐ ์ ์ฉ ์ด์ ๋ถ์ด์ง ์๋๋ค** โ ํ์๋ง ์๊ณ ์ฑ์ธ ๋ฐฉ๋ฒ์ด ์์ด ์ฌ์ฉ์๊ฐ ๋งํ๋ค.
|
|
1010
|
+
|
|
795
1011
|
### 3-5. ๋ฒํผ๋ฅ
|
|
796
1012
|
|
|
797
1013
|
| ์ํฉ | ์ฌ์ฉ |
|
|
@@ -801,6 +1017,7 @@ const columns: STableColumn[] = [
|
|
|
801
1017
|
| **์์ด์ฝ ํ๋๋ก ๋ป์ด ํตํ๋ ๋ถ๊ฐ ์กฐ์** | **`SGhostButton`** โ ๋ผ๋ฒจ์ด ์๋ ์์ด์ฝ ์ ์ฉ ๋ฒํผ (์๋ 3-5-5) |
|
|
802
1018
|
| ๋ณธ๋ฌธ ์ ์ด๋ ๋งํฌ | `STextLink` |
|
|
803
1019
|
| ๋ฉ์ธ ์ก์
+ ๋ถ๊ฐ ๋ฉ๋ด | `SDropdownButton` |
|
|
1020
|
+
| **GNB system ํจ๋์ ํ ์ค ์ก์
** | **`SSystemActionButton`** โ ํ ์ ์ฒด๊ฐ ๋ฒํผ์ธ ํ๋ฉดํ (์๋ 3-5-7) |
|
|
804
1021
|
|
|
805
1022
|
#### 3-5-1. ์ฑ์ ๋ฒํผ์ ํ์ด์ง๋น ๊ฐ์ ์ ํ์ด ์๋ค
|
|
806
1023
|
|
|
@@ -815,6 +1032,19 @@ const columns: STableColumn[] = [
|
|
|
815
1032
|
|
|
816
1033
|
`SDropdownButton` ๋ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅด๋ฉฐ, **ํ์ด์ง๋น `primary` ์ฑ์ 1๊ฐ ๊ณ์ฐ์ ํฌํจ**๋๋ค.
|
|
817
1034
|
|
|
1035
|
+
##### ๋ฌด์์ด ์ด๋ ์๊ณ์ธ๊ฐ
|
|
1036
|
+
|
|
1037
|
+
๊ฐ์๋ง์ผ๋ก๋ ํ๋ณด๊ฐ ์ฌ๋ฟ์ผ ๋ ์ด๋ ๊ฒ์ ์ฌ๋ฆด์ง ๊ฐ๋ฆฌ์ง ์๋๋ค. ๊ธฐ์ค์ **๊ทธ ์กฐ์์ด ๋ฌด์์ ๋ฏธ์น๋๊ฐ**๋ค.
|
|
1038
|
+
|
|
1039
|
+
| ์๊ณ | ๋ฌด์์ ์ฐ๋ |
|
|
1040
|
+
| --- | --- |
|
|
1041
|
+
| `primary` ์ฑ์ | **ํ์ด์ง ์ ์ฒด์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ **ํ๋ ์คํ (ํผ ์ ์ฅ, ์์ธ ์์ ํ์ , ์ผ๊ด ๋ฐ์) |
|
|
1042
|
+
| `secondary` ์ฑ์ | **ํ์ด์ง ์ ์ค์ฌ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ** (์ ํ ํญ๋ชฉ ์ํ ๋ณ๊ฒฝ, ๋ฐ์ก, ์น์ธ) |
|
|
1043
|
+
| `outline` (`neutral` ยท `primary`) | ๋จ์ ๋ฑ๋ก, ์ค์ ๋ณ๊ฒฝ, ์ด๋ยท์ทจ์ |
|
|
1044
|
+
|
|
1045
|
+
- **`primary` ์ฑ์์ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ํํ๋ ์คํ ํ๋์๋ง ์ด๋ค. ๊ทธ๋ฐ ์กฐ์์ด ์์ผ๋ฉด ํ์ด์ง์ `primary` ๊ฐ ์์ด๋ ๋๋ค.** ๊ฐ์ ์ ํ์ด "๋ฐ๋์ ํ๋ ์์ด์ผ ํ๋ค"๋ ๋ป์ ์๋๋ค.
|
|
1046
|
+
- **`secondary` ์ฐ์ ๋ฐฐ์น ๊ธ์ง๋ ์น์
์ด ๋ค๋ฅด๋ฉด ์ ์ฉ๋์ง ์๋๋ค.** ์น์
๋ง๋ค ๋
๋ฆฝ ์ธ๋ผ์ธ ํผ์ด ์๋ ์์ธ ํ์ด์ง(ยง4-4)๊ฐ ๊ทธ๋ ๋ค โ ๋๋ํ ๋์ธ ๋ ๋ฒํผ์ด ๊ฐ์ ํ๋จ ๋จ์ ์์ ์์ ๋์ ๊ท์น์ด๋ค.
|
|
1047
|
+
|
|
818
1048
|
#### 3-5-2. `size` ๋ ๋์ด๋ ์์น๊ฐ ์ ํ๋ค
|
|
819
1049
|
|
|
820
1050
|
| ์์น | size |
|
|
@@ -920,6 +1150,35 @@ const columns: STableColumn[] = [
|
|
|
920
1150
|
</div>
|
|
921
1151
|
```
|
|
922
1152
|
|
|
1153
|
+
#### 3-5-7. `SSystemActionButton` โ GNB system ํจ๋์ ํ ์ค ์ก์
|
|
1154
|
+
|
|
1155
|
+
**ํ ์ ์ฒด๊ฐ ํ๋์ ๋ฒํผ**์ธ ํ๋ฉดํ ์ปจํธ๋กค์ด๋ค. ์์ด์ฝ ํ๋ ์ + ๋ผ๋ฒจ + ์ฐ์ธก ์ก์
์ด ํ ์ค์ ๋ถ๊ณ , hover ํ๋ฉด ํ๋ฉด์์ด ํ ๋จ๊ณ ๋ฐ๋๋ค.
|
|
1156
|
+
|
|
1157
|
+
| ์ํฉ | ์ฌ์ฉ |
|
|
1158
|
+
| --- | --- |
|
|
1159
|
+
| ํ์ด์งยท๋ชจ๋ฌ์ ์ผ๋ฐ ์ก์
| `SButton` โ ๋ผ๋ฒจ ํญ๋งํผ๋ง ์ฐจ์งํ๋ค |
|
|
1160
|
+
| ๋ชฉ๋ก์์ ํญ๋ชฉ ํ๋๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SListItem` ยท `STree` (ยง3-7-6ยทยง3-7-7) |
|
|
1161
|
+
| ์ข์ธก ๋ด๋น๊ฒ์ด์
์ ๋ฉ๋ด | `SGnb` ์ `menus` (ยง4-1) |
|
|
1162
|
+
| **GNB system ํจ๋์์ ์ค์ ยท์ฐ๊ฒฐ ์ํ๋ฅผ ํ ์ค์ฉ ์๊ณ , ๊ทธ ์ค์ ๋๋ฌ ๋ค์ด๊ฐ๊ฒ ํ๋ค** | **`SSystemActionButton`** |
|
|
1163
|
+
|
|
1164
|
+
**๋ฌด์์ด ๊ทธ๋ ค์ง๋์ง๋ `type` ์ด ์ ํ๋ค.** ํ์
๋ง๋ค ๋ค๋ฅธ ๊ฐ๋ง `option` ์ผ๋ก ๋ฐ์ผ๋ฏ๋ก, ํ์
์ ๋ง์ง ์๋ `option` ์ ํ์
์๋ฌ๊ฐ ๋๋ค.
|
|
1165
|
+
|
|
1166
|
+
| `type` | ์ ํ ์์ด์ฝ | ๋ผ๋ฒจ | ์ฐ์ธก | ์ธ์ |
|
|
1167
|
+
| --- | --- | --- | --- | --- |
|
|
1168
|
+
| `account` | `user` ๊ณ ์ | `label` | ์์ | ๋ก๊ทธ์ธํ ๊ณ์ ์ ๋ณด์ฌ์ฃผ๊ณ ๊ณ์ ํ๋ฉด์ผ๋ก ๋ณด๋ผ ๋ |
|
|
1169
|
+
| `select` | `option.icon` (ํ์) | `label` | ํ์ดํ | ๋๋ฌ์ ํ์ ํ๋ฉด์ผ๋ก ๋ค์ด๊ฐ ๋ |
|
|
1170
|
+
| `switch` | `option.icon` (ํ์) | `label` | `option.text` + ์๋ก๊ณ ์นจ | ์ง๊ธ ๋ถ์ด ์๋ ๋์์ ๊ฐ์ ๋ผ์ธ ๋ |
|
|
1171
|
+
| `subSelect` | `option.icon` (ํ์) | `label` | `option.text` + ํ์ดํ | ์ง๊ธ ์ ํ๋ผ ์๋ ๊ฐ์ ํจ๊ป ๋ณด์ฌ์ค ๋ |
|
|
1172
|
+
| `status` | ์์ | ์ํ ํ๊ทธ(`option.color`ยท`option.label`) | ํ์ดํ | ๋ผ๋ฒจ ๋์ ์ํ ์์ฒด๊ฐ ์ ๋ชฉ์ผ ๋ |
|
|
1173
|
+
|
|
1174
|
+
- **`SPage` ๋ณธ๋ฌธ์ ์ง์ ๋์ง ์๋๋ค.** ํญ์ ๊ฐ๋ ์ฑ์ฐ๋ ํ์ด๋ผ ํ์ด์ง์ ๋ฐ๋ก ๋์ผ๋ฉด ํ์ฒ๋ผ ๋ณด์ธ๋ค. GNB system ํจ๋ยท`SDrawer`ยท`SPopover` ์ฒ๋ผ **์ข์ ํญ์ด ์ ํด์ง ์๋ฆฌ**์ ์๋๋ค. ํ ์ฌ์ด ๊ฐ๊ฒฉ์ `--cmp-gnb-system-panel-gap` ์ด๋ค.
|
|
1175
|
+
- **GNB ๋งจ ์๋์ ์๋ ๊ฒ์ด๋ผ๋ฉด ์ด ๋ฒํผ์ ์ง์ ๋ฐฐ์นํ์ง ๋ง๊ณ `SGnbSystem` ์ `actions` ์ ๋๊ธด๋ค** (ยง4-1). ํจ๋์ ๋ฐฐ๊ฒฝยท๊ตฌ๋ถ์ ยท๋๋ฉ์ธ ํ๊ทธยท์๋ฆผยท๊ณ์ ๊น์ง ํ ๋ฒ๋ก ๊ทธ๋ ค์ฃผ๋ฏ๋ก, ์กฐ๊ฐ์ ์์ผ๋ก ์กฐ๋ฆฝํ ์ด์ ๊ฐ ์๋ค.
|
|
1176
|
+
- **`color` ๋ ๋์ด๋ ํ๋ฉด์ ๋ฐ๋ผ๊ฐ๋ค** โ ํฐ ๋ฉด์ด๋ฉด `light`, ์ค์
๋ธ๋ฃจ ๋ฉด์ด๋ฉด `dark`, ๋ค์ด๋น ๋ฉด์ด๋ฉด `darker`. ๋ฐฐ๊ฒฝ๊ณผ ๋ค๋ฅธ ์์ ๊ณ ๋ฅด๋ฉด ๋ฒํผ๋ง ๋ ๋ณด์ธ๋ค.
|
|
1177
|
+
- **์ํ๋ defaultยทhover ๋๋ฟ์ด๋ค.** ํ ํฐ์ selected ๊ฐ ์์ผ๋ฏ๋ก "์ง๊ธ ์ด๋ ค ์๋ ํญ๋ชฉ"์ ์ด ๋ฒํผ์ผ๋ก ํ์ํ์ง ์๋๋ค. ์ ํ ์ํ๊ฐ ํ์ํ ์๋ฆฌ๋ฉด `SGnb` ๋ฉ๋ด๋ `SListItem`(ยง3-7-6) ์ด๋ค.
|
|
1178
|
+
- **์ ํ ์์ด์ฝ์ด ๋น๋ ํ์ ์๋ค.** `account` ๋ `user` ๊ณ ์ , `status` ๋ ํ๊ทธ๊ฐ ์๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ , ๋๋จธ์ง๋ `option.icon` ์ด ํ์๋ค.
|
|
1179
|
+
- **์ฐ์ธก ์์ด์ฝ์ `type` ์ด ์ ํ๋ฏ๋ก ๋ฐ์์ ๋ฐ๊พธ์ง ์๋๋ค.** ํ์ดํ๊ฐ ํ์ํ๋ฐ ๋ฌธ๊ตฌ๊ฐ ์์ผ๋ฉด `select`, ๋ฌธ๊ตฌ๊ฐ ํจ๊ป ํ์ํ๋ฉด `subSelect` ๋ค.
|
|
1180
|
+
- ๋์ดยท๋ผ์ด๋ยท์์ด์ฝ ํฌ๊ธฐยท์ข์ฐ ์ฌ๋ฐฑ์ ์ ๋ถ ํ ํฐ์ด ๋ฃ๋๋ค. ์ง์ ์ฃผ์ง ์๋๋ค.
|
|
1181
|
+
|
|
923
1182
|
### 3-6. ์์ญ ๋๋๊ธฐ โ SDivider vs SSplitter
|
|
924
1183
|
|
|
925
1184
|
| ์ํฉ | ์ฌ์ฉ |
|
|
@@ -929,6 +1188,25 @@ const columns: STableColumn[] = [
|
|
|
929
1188
|
|
|
930
1189
|
`SSplitter` ์ ๊ตฌ๋ถ์ ์ ํ์ ์๋ฆฌ๋ง ์ก๊ณ ์น ํด์ง์ง ์๋ค๊ฐ, ๊ฒฝ๊ณ์ ์ปค์๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ํฌ์ปค์ค๋ฅผ ์ฃผ๋ฉด ๊ทธ๋ ๋๋ฌ๋๋ค โ ์กฐ์ ๊ฐ๋ฅํ ์๋ฆฌ๋ผ๋ ์ ํธ๋ค. **ํญ์ ๋ณด์ด๋ ์ ์ด ํ์ํ๋ฉด `SDivider` ๋ฅผ ์ด๋ค.** ์ ์ยท๋๊ปยท์ฃผ๋ณ ์ฌ๋ฐฑ์ ํ ํฐ์ด ์ ํ๋ฏ๋ก ์ง์ ์ฃผ์ง ์๋๋ค.
|
|
931
1190
|
|
|
1191
|
+
**์ธ๋ก ๊ตฌ๋ถ์ ์ ๊ธธ์ด๋ `height` prop ์ผ๋ก ์ค๋ค โ `className` ์ `h-*` ๋ก ์ฃผ์ง ์๋๋ค.**
|
|
1192
|
+
|
|
1193
|
+
```tsx
|
|
1194
|
+
// ์ค ๋์ด๋ฅผ ๊ทธ๋๋ก ์ฑ์ด๋ค (๊ธฐ๋ณธ)
|
|
1195
|
+
<div className="flex items-center gap-sd-8">
|
|
1196
|
+
<span>์ด ์ฃผ๋ฌธ 3๊ฑด</span>
|
|
1197
|
+
<SDivider vertical />
|
|
1198
|
+
<span>์ด ํ๋ชฉ 12๊ฑด</span>
|
|
1199
|
+
</div>
|
|
1200
|
+
|
|
1201
|
+
// ์์ ๊ธ์๋ณด๋ค ์งง์ ์ ์ด ํ์ํ ๋๋ง ๊ธธ์ด๋ฅผ ์ ํ๋ค
|
|
1202
|
+
<SDivider vertical height={20} />
|
|
1203
|
+
|
|
1204
|
+
// ํ์ง ๋ง ๊ฒ โ ์ ์ด ์ค ๋งจ ์์ ๋ถ๋๋ค
|
|
1205
|
+
<SDivider vertical className="h-sd-20" />
|
|
1206
|
+
```
|
|
1207
|
+
|
|
1208
|
+
๊ธธ์ด๋ฅผ ์ฃผ์ง ์์ผ๋ฉด `align-self: stretch` ๋ก ๋ถ๋ชจ ์ค ๋์ด๋ฅผ ์ฑ์ฐ๋๋ฐ, `stretch` ๋ ๋์ด๊ฐ `auto` ์ผ ๋๋ง ๋๋ฆฐ๋ค. `className` ์ผ๋ก ๋์ด๋ฅผ ์ ํ๋ฉด `stretch` ๊ฐ ์กฐ์ฉํ ๋ฌดํจ๊ฐ ๋์ด ์ ์ด ์๋ก ์๋๋ค. `height` ๋ ๊ธธ์ด์ ๊ต์ฐจ์ถ ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํจ๊ป ์ ์ฉํ๋ฏ๋ก ์ด ํจ์ ์ด ์๋ค โ ์ยท์๋ ์ ๋ ฌ์ด ํ์ํ๋ฉด `className="self-start"` ์ฒ๋ผ ๋ช
์ํ๋ค. (`sellmate/divider-vertical-height` ๊ท์น์ด ์ก๋๋ค.)
|
|
1209
|
+
|
|
932
1210
|
```tsx
|
|
933
1211
|
<SSplitter defaultValue={30} limits={[20, 60]}>
|
|
934
1212
|
<SSplitter.Before>๋ด๋น๊ฒ์ด์
</SSplitter.Before>
|
|
@@ -959,18 +1237,42 @@ const columns: STableColumn[] = [
|
|
|
959
1237
|
|
|
960
1238
|
> ยง3-0 ๋ผ์ฐํ
์์ ์ด ์ ์ ๊ฐ๋ฆฌํค๋ ์๋ฆฌ๋ค์ด๋ค. <!-- TODO(๋์์ธ): ์ ์ฒด ๊ฒ์ยทํ์ -->
|
|
961
1239
|
|
|
962
|
-
#### 3-7-1. SInput vs STextarea
|
|
1240
|
+
#### 3-7-1. SInput vs STextarea vs SEditor vs SSearchInput
|
|
963
1241
|
|
|
964
|
-
|
|
1242
|
+
**๋จผ์ "๊ทธ ๊ฐ์ด ์ ์ฅ๋๋๊ฐ"๋ฅผ ๋ณธ๋ค.** ์ ์ฅ๋๋ฉด ํผ ํ๋(`SInput`ยท`STextarea`), ํ๋ฉด์ ์ขํ๊ธฐ๋ง ํ๊ณ ์ฌ๋ผ์ง๋ฉด `SSearchInput` ์ด๋ค.
|
|
965
1243
|
|
|
966
1244
|
| ๊ฐ | ์ฌ์ฉ |
|
|
967
1245
|
| --- | --- |
|
|
968
1246
|
| ์ด๋ฆยท์ฝ๋ยท์ ํ๋ฒํธยทURL ์ฒ๋ผ ํ์์ด ์ ํด์ง ๊ฐ | `SInput` |
|
|
969
1247
|
| ๋ฉ๋ชจยท์ฌ์ ยท์ค๋ช
์ฒ๋ผ ๊ธธ์ด๊ฐ ์์ธก๋์ง ์๋ ๋ฌธ์ฅ | `STextarea` |
|
|
1248
|
+
| ์์(์ ๋ชฉยท๊ตต๊ฒยท๋ชฉ๋กยท์ ๋ ฌยท์ยท๋งํฌยท์ด๋ฏธ์ง)์ด ๊ฐ์ ์ผ๋ถ๋ก ์ ์ฅ๋์ด์ผ ํ๋ ๊ธ | `SEditor` |
|
|
1249
|
+
| ์ง๊ธ ๋ณด์ด๋ ๋ชฉ๋กยท๊ฒฐ๊ณผ๋ฅผ ์ขํ๋ ๊ฒ์์ด | `SSearchInput` |
|
|
1250
|
+
|
|
1251
|
+
ํผ ํ๋ ๋์ **์ค ์๊ฐ ์๋๋ผ ๊ฐ์ ์ฑ๊ฒฉ์ผ๋ก** ๊ฐ๋ฆฐ๋ค. ๊ฐ์ด ๊ธธ์ด์ง ์ ์๋๋ฐ `SInput` ์ ์ฐ๋ฉด ์ฌ์ฉ์๊ฐ ์๊ธฐ๊ฐ ์ด ๊ฒ์ ๋ค์ ์ฝ์ง ๋ชปํ๋ค โ ํ ์ค ์์์ ์ข์ฐ๋ก ์คํฌ๋กคํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋๋ก ์งง์ ๊ฐ์ `STextarea` ๋ฅผ ์ฐ๋ฉด ๋น ๊ณต๊ฐ์ด ๋จ์ ์
๋ ฅ๋์ ์๋ชป ๊ธฐ๋ํ๊ฒ ํ๋ค.
|
|
1252
|
+
|
|
1253
|
+
`SEditor` ๋ **์์์ด ๊ฐ์ ์ผ๋ถ์ผ ๋๋ง** ์ด๋ค. ๊ฐ์ HTML ๋ฌธ์์ด๋ก ์ฃผ๊ณ ๋ฐ์ผ๋ฏ๋ก ์ ์ฅยท๊ฒ์ยท๋น๊ต๊ฐ ํ๋ฌธ๋ณด๋ค ๋น์ธ๊ณ , ํ๋ฉด์ ๋ค์ ๋ณด์ฌ์ค ๋๋ HTML ๋ก ๋ ๋ํด์ผ ํ๋ค. ์์์ด ํ์ ์๋ ๋ฉ๋ชจยท์ฌ์ ๋ `STextarea` ๋ค โ "์
๋ ฅ์ฐฝ์ด ์ปค ๋ณด์ฌ์" ๊ณ ๋ฅด๋ ์ปดํฌ๋ํธ๊ฐ ์๋๋ค. ๋ฐ๋๋ก ๊ณต์งยท์๋ด๋ฌธยท์ํ ์์ธ์ฒ๋ผ **์์ฑ์๊ฐ ์ ํ ๊ฐ์กฐ์ ๋ชฉ๋ก์ด ๊ทธ๋๋ก ๋ณด์ฌ์ผ ํ๋ ๊ธ**์ด๋ฉด `STextarea` ๋ก๋ ํํํ ์ ์๋ค.
|
|
970
1254
|
|
|
971
|
-
|
|
1255
|
+
`SEditor` ๋ `SInput`ยท`STextarea` ์ ๊ฐ์ ํผ ํ๋๋ค โ `label`ยท`hint`ยท`rules`ยท`errorMessage` ๋ฅผ ์๊ธฐ prop ์ผ๋ก ๋ฐ๊ณ `SForm` ์ ์ถ ๊ฒ์ฆ์๋ ๋ค์ด๊ฐ๋ค. ๋น ๋ฌธ์๋ ๋น ๋ฌธ์์ด๋ก ๋์ค๋ฏ๋ก `required` ๊ท์น์ด ๊ทธ๋๋ก ๊ฑธ๋ฆฐ๋ค. **ํด๋ฐ๋ฅผ ๋๋ ๊ธธ์ ์๋ค** โ ์์ ์
๋ ฅ์ด ํ์ ์๋ ์๋ฆฌ๋ผ๋ฉด ์์ ์๋ `SEditor` ๊ฐ ์๋๋ผ `STextarea` ๋ฅผ ๊ณ ๋ฅธ๋ค.
|
|
972
1256
|
|
|
973
|
-
|
|
1257
|
+
ํด๋ฐ๋ **ํ๋ฆฌ์
๋ ์ค ํ๋๋ฟ์ด๋ค.** ๊ธฐ๋ณธ์ ์ธ ์ ์๋ ๊ฒ์ ๋ชจ๋ ๋ณด์ด๊ณ , **`simple` ์ ์ผ๋ฉด ๊ธ์์ ๊ฑฐ๋ ์์๋ง ๋จ๋๋ค** โ ๋ชฉ๋กยท์ ๋ ฌยท์ธ์ฉยท์ฝ๋ยท๋งํฌยท์ด๋ฏธ์งยท๊ตฌ๋ถ์ ์ด ๋น ์ง๊ณ ์ ํํ์ ๋ ๋จ๋ ํ๋ ๊ฐ์ ๋ฒ์๋ก ์ค์ด๋ ๋ค. ๋ฐ์ ๊ธ์ **๋ฌธ๋จ ๊ตฌ์กฐ๊น์ง ์์ฑ์๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด ๊ณค๋ํ ์๋ฆฌ**(์ข์ ์นธ์ ๋ฉ๋ชจยท์ฌ์ ยท์งง์ ์๋ด๋ฌธ)๊ฐ `simple` ์ด๋ค. ํญ๋ชฉ์ ์ง์ ์กฐํฉํ๋ prop ์ ์๋ค โ ํ๋ฉด๋ง๋ค ๋ค๋ฅธ ํด๋ฐ๊ฐ ์๋ฉด ๊ทธ ์์ฒด๊ฐ ํ์ต ๋น์ฉ์ด ๋๋ค.
|
|
1258
|
+
|
|
1259
|
+
๋ณธ๋ฌธ์์ ๋ฐ์ดํยทํ์ดํยทํ์ดํ๋ **์๋์ผ๋ก ์นํ๋๋ค**(`"` โ `โโ`, `--` โ `โ`, `->` โ `โ`). ๋ ์ ์์ผ๋ฏ๋ก, ์ํ ์ฝ๋ยท๊ท๊ฒฉ ๋ฌธ์์ด์ฒ๋ผ **์
๋ ฅํ ๊ทธ๋๋ก ๋จ์์ผ ํ๋ ๊ฐ**์ `SEditor` ๋ณธ๋ฌธ์ด ์๋๋ผ `SInput` ์ผ๋ก ๋ฐ๋ก ๋ฐ๋๋ค.
|
|
1260
|
+
|
|
1261
|
+
ํด๋ฐ๋ **์๋ฆฌ๋ฅผ ์งํจ๋ค**(๊ณ ์ ). ๊ธด ๊ธ์ ์ฐ๋ ๋์ ๋ง๋๊ฐ ํ๋ฉด ๋ฐ์ผ๋ก ๋๊ฐ์ง ์์ผ๋ฏ๋ก, ํด๋ฐ๋ฅผ ๋ฐ๋ก ๊ฐ์ธ๊ฑฐ๋ ์์น๋ฅผ ์ฃผ์ง ์๋๋ค.
|
|
1262
|
+
|
|
1263
|
+
ํด๋ฐ์๋ **๊ธ์ ํฌ๊ธฐ ๋๋กญ๋ค์ด**๊ณผ **๊ธ์์ ํ๋ ํธ**๊ฐ ๋ค์ด ์๋ค โ ์์ฑ์๊ฐ ๋ฌธ๋จ๋ง๋ค ํฌ๊ธฐยท์์ ์ง์ ์ง์ ํ ์ ์๊ณ , ํฌ๊ธฐ ๋ชฉ๋ก ๋งจ ์ `๊ธฐ๋ณธ` ์ ์ง์ ์ ๋ผ๋ ์๋ฆฌ๋ค. ํฌ๊ธฐ ๋๊ธ์ ํ๋ฉด ํ์ดํฌ(ยง2-1)๊ฐ ์๋๋ผ ์๋ํ๋ก์ธ์์ ๋๊ธ์ด๋ผ ๋ณธ๋ฌธ๋ณด๋ค ํจ์ฌ ํฐ ๋จ๊ณ๊น์ง ์๋ค. **๋๊ธ๋ ํ๋ ํธ๋ ์ขํ๋ prop ์ด ์๋ค** โ ํ๋ฉด๋ง๋ค ๊ณ ๋ฅผ ์ ์๋ ๊ฒ์ด ๋ค๋ฅด๋ฉด ๊ฐ์ ๊ธ์ด ์ด๋์ ๋ถ๋๋์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ **์์ฑ์๊ฐ ํ๋ฉด ๋ฆฌ๋ฌ์ ๋ฒ์ด๋๋ฉด ๊ณค๋ํ ์๋ฆฌ(์ํ ์์ธ ์ค๋ช
ยท๋ฐ๋ณต ๋
ธ์ถ๋๋ ์๋ด๋ฌธ ๋ฑ)๋ผ๋ฉด `SEditor` ๊ฐ ๋ง๋ ์๋ฆฌ์ธ์ง ๋จผ์ ๋ณธ๋ค** โ ์์์ด ๊ฐ์ ์ผ๋ถ๊ฐ ์๋๋ผ๋ฉด `STextarea` ๋ค. ๊ณ ๋ฅธ ํฌ๊ธฐยท์์ ์ ์ฅ๋๋ HTML ์ ๊ทธ๋๋ก ๋จ์ ๋์ค์ ๋๋๋ฆด ์ ์๋ค.
|
|
1264
|
+
|
|
1265
|
+
๋ณธ๋ฌธ์๋ **ํ**๋ ๋ค์ด๊ฐ๋ค โ ํด๋ฐ์ `ํ` ๋๋กญ๋ค์ด์์ ๊ฒฉ์๋ฅผ ๋์ด ํฌ๊ธฐ๋ฅผ ๊ณ ๋ฅด๊ณ (์ต๋ 8ํ ร 10์ด), ํยท์ด์ ๋๋ฆฌ๊ณ , ์นธ์ ๋ณํฉํ๋ค. **์ด ๋๋น๋ ๊ท ๋ฑ ๊ณ ์ ์ด๊ณ ๋ฐ๊ฟ ์ ์๋ค**: ๋๋น๋ฅผ ์ ์ฅํ๋ฉด ๊ทธ ๊ฐ์ด px ๋ก ๋ฐํ ์์ฑํ ํ๋ฉด๋ณด๋ค ์ข์ ๊ณณ์์ ํ๊ฐ ๋์น๋ค. ๋์ ์ด๋ค ํญ์์๋ ํ๊ฐ ์์ ์์ ๋ค์ด์ค๋๋ก ์ด์ ๊ณ ๋ฅด๊ฒ ๋๋๋ค โ ์ด์ด ๋ง์ ํ๋ ์ข์ ์นธ์์ ๊ธ์๊ฐ ์๊ฒ ์ ํ๋ฏ๋ก, **์ด์ด ๋ท์ ๋์ด๊ฐ๋ ํ๋ผ๋ฉด `SEditor` ๋ณธ๋ฌธ์ด ์๋๋ผ `STable` ์ด ๋ง๋ ์๋ฆฌ์ธ์ง ๋ณธ๋ค.** ํ๋ ์์ฑ์๊ฐ ์ฐ๋ ๊ธ์ ์ผ๋ถ์ผ ๋๋ง ์ฌ๊ธฐ์ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ค ์ธ์ ๋ณด์ฌ ์ฃผ๋ ๊ฒ์ `STable` ์ด๋ค.
|
|
1266
|
+
|
|
1267
|
+
๊ธ์ ์ ํํ๋ฉด **๊ทธ ์์ ์์ ํ์ด ๋ฌ๋ค**(๋ฒ๋ธ ๋ฉ๋ด). ํด๋ฐ๊น์ง ์ปค์๋ฅผ ์ฎ๊ธฐ์ง ์๊ณ ๋ฐ๋ก ๊ตต๊ฒยท์ยท๋งํฌ๋ฅผ ๊ฑฐ๋ ๊ธธ์ด๋ค. **๋๊ณ ์ผ๋ prop ์ ์๋ค** โ ํธ์งํ ์ ์์ผ๋ฉด ์ธ์ ๋ ๋จ๊ณ , ์ฝ๊ธฐ ์ ์ฉยท๋นํ์ฑ์ผ ๋๋ ๋จ์ง ์๋๋ค. ํ๋ฉด๋ง๋ค ์๊ณ ์๊ณ ๊ฐ ๋ฌ๋ผ์ง๋ฉด ๊ทธ ์์ฒด๊ฐ ํ์ต ๋น์ฉ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ ๊ตฌ์ฑ์ `simple` ์ด ๋ง๋์ ํจ๊ป ์ ํ๋ค. ๋จ๋ ์๋ฆฌ๋ DS ๊ฐ ์ก๋๋ค, ์ง์ ๊ฐ์ธ๊ฑฐ๋ ์์น๋ฅผ ์ฃผ์ง ์๋๋ค.
|
|
1268
|
+
|
|
1269
|
+
`SEditor` ๋ ํ๋ฉด์ ์ฒ์ ๋์ผ ๋ **์๋ํฐ ์์ง์ ๋ฐ๋ก ๋ถ๋ฌ์จ๋ค** โ ์ฑ ์ด๊ธฐ ๋ฒ๋ค์๋ ๋ค์ด๊ฐ์ง ์๋๋ค. ๊ทธ๋์์ ๊ฐ์ ํฌ๊ธฐ์ ๋น ํธ์ง ์์ญ์ด ์๋ฆฌ๋ฅผ ์งํค๋ฏ๋ก ๋ ์ด์์์ ํ๋ค๋ฆฌ์ง ์์ง๋ง, **๋ง์ดํธํ์๋ง์ `ref.current.getHTML()` ๋ก ๊ฐ์ ์ฝ๊ฑฐ๋ ํด๋ฐ๋ฅผ ๋๋ฅผ ์๋ ์๋ค.** ์ด์๋ง์ ์ปค์๋ฅผ ๋๊ณ ์ถ์ผ๋ฉด `ref.current.focus()` ๋ฅผ ๊ทธ๋ฅ ๋ถ๋ฅด๋ฉด ๋๋ค โ ์ค๋น๋๋ ์๊ฐ ๋์ ์คํ๋๋ค.
|
|
1270
|
+
|
|
1271
|
+
**์ด๋ฏธ์ง๋ฅผ ๋ฃ์ผ๋ ค๋ฉด `onImageUpload` ๋ฅผ ์ค๋ค** โ ๊ณ ๋ฅธ ํ์ผ์ ์ ์ฅํ๊ณ ํ์ํ URL ์ ๋๋ ค์ฃผ๋ ํ
์ด๋ค. ์ ์ฅ ์์น๋ ์ฑ๋ง๋ค ๋ค๋ฅด๋ฏ๋ก DS ๊ฐ ์ ํ์ง ์๊ณ , ํ
์ด ์์ผ๋ฉด ํด๋ฐ์์ ์ด๋ฏธ์ง ํญ๋ชฉ์ด ๋น ์ง๋ค. ๋ณธ๋ฌธ์ base64 ๋ฅผ ๋ฐ๋ ๊ธธ์ ๋ง์ ๋์๋ค โ ์ ์ฅ HTML ์ด ์ MB ๋ก ๋ถํ์ด ๊ทธ๋๋ก DBยทAPI ์ ์ค๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
1272
|
+
|
|
1273
|
+
`SSearchInput` ์ ํผ ํ๋๊ฐ ์๋๋ค โ ๋ผ๋ฒจยทํํธยท์ ํจ์ฑ ๊ท์นยท์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์ง ์๊ณ , `SForm` ์ ์ ์ถ ๊ฒ์ฆ ๋์์๋ ๋ค์ด๊ฐ์ง ์๋๋ค. ๋๋ณด๊ธฐ ์์ด์ฝ์ด ํญ์ ์์ ๋ถ์ด "์ฌ๊ธฐ๋ ๊ฒ์"์์ ์ค์ค๋ก ๋ฐํ๋ฏ๋ก ๋ผ๋ฒจ์ ๋ฐ๋ก ๋ถ์ด์ง ์๋๋ค. ๊ฒ์ ์คํ์ `onSearch`(Enter) ๋ก ๋ฐ๊ณ , ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ์ขํ๋ ์ค์๊ฐ ํํฐ๋ผ๋ฉด `onValueChange` ๋ง ์ด๋ค. ๋ฐ๋๋ก ๊ฒ์์ด๋ฅผ **์ ์ฅํ๊ฑฐ๋ ๊ฒ์ฆํด์ผ ํ๋ค๋ฉด** ๊ทธ๊ฒ์ ํผ ๊ฐ์ด๋ฏ๋ก `SInput` ์ด๋ค.
|
|
1274
|
+
|
|
1275
|
+
#### 3-7-2. ํ๋๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๋ ์ฌ์ฏ โ SSelect vs SRadioGroup vs SRadioCardGroup vs SRadioButton vs STabs vs SRadio
|
|
974
1276
|
|
|
975
1277
|
**๋จผ์ "๊ณ ๋ฅด๋ฉด ๋ฌด์์ด ๋ฐ๋๋๊ฐ"๋ฅผ ๋ณธ๋ค.**
|
|
976
1278
|
|
|
@@ -981,10 +1283,17 @@ const columns: STableColumn[] = [
|
|
|
981
1283
|
| --- | --- |
|
|
982
1284
|
| 6๊ฐ ์ด์, ๋๋ ์๋ฒ์์ ์ค๋ ๋์ ๋ชฉ๋ก | `SSelect` |
|
|
983
1285
|
| 2~5๊ฐ ๊ณ ์ + ์ ํ์ง๋ฅผ ํญ์ ๋ณด์ฌ์ผ ํจ | `SRadioGroup` |
|
|
1286
|
+
| 2~5๊ฐ ๊ณ ์ + **์ ํ์ง๋ง๋ค ์ค๋ช
ํ ์ค์ด ํ์ํจ** | `SRadioCardGroup` |
|
|
984
1287
|
| 2~4๊ฐ + ์งง์ ๋ผ๋ฒจ์ ๋ฐฐํ์ ๋ชจ๋ ์ ํ (์ธ๊ทธ๋จผํธ) | `SRadioButton` |
|
|
985
1288
|
|
|
986
1289
|
- **`SRadio` ๋ฅผ ์ง์ ๋์ดํ์ง ์๋๋ค.** ๊ทธ๋ฃน ๊ฐ๊ฒฉ์ `SRadioGroup` ์ด ๋ง์ถ๋ค (ยง2-2). `SRadio` ๋จ๋
์ `SRadioGroup` ์ด ๋ง๋ค ์ ์๋ ๋ฐฐ์น โ ํ ์
์์ ํ๋ง๋ค ํ๋์ฉ ๋๋ ๊ฒฝ์ฐ โ ์๋ง ์ด๋ค.
|
|
987
1290
|
- `SRadioButton` ์ `options` ๋ฅผ ํต์งธ๋ก ๋ฐ๋ ์ธ๊ทธ๋จผํธ ์ปจํธ๋กค์ด๋ผ `SRadio` ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฃ๋ ๊ฒ ์๋๋ค.
|
|
1291
|
+
- **`SRadioGroup` ๊ณผ `SRadioCardGroup` ์ ๊ฐ๋ฆผ๊ธธ์ "์ค๋ช
์ด ํ์ํ๊ฐ" ํ๋๋ค.** ๋ผ๋ฒจ๋ง์ผ๋ก ๋ป์ด ํตํ๋ฉด `SRadioGroup`, ๊ณ ๋ฅด๊ธฐ ์ ์ ํ ์ค ์ค๋ช
์ ์ฝ์ด์ผ ํ๋ฉด `SRadioCardGroup` ์ด๋ค. ๋ผ๋ฒจ ์์ ์ค๋ช
์ ๊ดํธ๋ก ๋ง๋ถ์ฌ ๋์ด์ง ์๋๋ค.
|
|
1292
|
+
- **`SRadioCardGroup` ์ `SRadioGroup` ์ ๋์ฒด๊ฐ ์๋๋ผ ๊ฒฉ์ํ์ด๋ค.** ๋ผ๋ฒจ์ด ํ ๋จ๊ณ ํฌ๊ณ ๊ทธ ์๋ ์ค๋ช
์ค๊น์ง ๋ค์ด๊ฐ ์นด๋ ํ ์ฅ์ด ์๋ฆฌ๋ฅผ ๋๋ํ ์ด๋ค โ ์ ํ์ง๊ฐ ์กฐ๋ฐํ๊ฒ ๋ฐ๋ณต๋๋ ์๋ฆฌ์๋ ๊ณผํ๋ค.
|
|
1293
|
+
- **์ฐ๋ ์๋ฆฌ๋ ์ค์ ํ๋ฉดยท๋ง๋ฒ์ฌ(์คํ
)์ ์์ ๊ฒฐ์ ์ด๋ค.** ๊ณ ๋ฅด๊ณ ๋๋ฉด ๋ค ํ๋ฉด์ด ํต์งธ๋ก ๋ฐ๋๊ฑฐ๋ ๋๋๋ฆฌ๊ธฐ ์ด๋ ค์ด ์ ํ โ ํ๊ฐ ๋์์ ๋ฒ์(์ ์ฒด/ํน์ ๊ตฌ์ฑ์), ์๋ด ์๋ ๋ฐฐ์ ๋ฐฉ์ ๊ฐ์ ๊ฒ. ๋ชฉ๋ก ํํฐยทํ ์ ์กฐ๊ฑด์ฒ๋ผ ๊ฐ์ ์ ํ์ง๊ฐ ํ๋ฉด๋ง๋ค ๋ฐ๋ณต ๋
ธ์ถ๋๋ ์๋ฆฌ์๋ `SRadioGroup` ์ ์ด๋ค.
|
|
1294
|
+
- `SRadioCard` ๋จ๋
์ `SRadioCardGroup` ์ด ๋ง๋ค ์ ์๋ ๋ฐฐ์น์๋ง ์ด๋ค โ ๋์ด์ ๊ทธ๋ฃน์ด ๋งก๋๋ค (ยง2-2).
|
|
1295
|
+
- ์นด๋ ์์ ์ํ ๋ฐฐ์ง๋ฅผ ๋ฃ์ผ๋ ค๋ฉด `tag` ์ฌ๋กฏ์ `STag` ๋ฅผ ์ค๋ค. ๋ผ๋ฒจ ๋ฌธ์์ด์ "(์ถ์ฒ)" ์ฒ๋ผ ์์ด ์ฐ์ง ์๋๋ค.
|
|
1296
|
+
- **์นด๋์ฒ๋ผ ์๊ฒผ๋ค๊ณ `SCard`/`SSectionHeaderCard` ๋ก ๊ฐ์ธ์ง ์๋๋ค.** `SRadioCard` ์์ฒด๊ฐ ์๊ฒฐ๋ ์์์ด๊ณ , ๋์ด ๊ฐ๊ฒฉ์ `SRadioCardGroup` ์ `direction` ์ด ๋ง์ถ๋ค (ยง2-2).
|
|
988
1297
|
|
|
989
1298
|
#### 3-7-3. ์ผ๊ณ ๋๋ ์
โ SCheckbox vs SSwitch vs SToggle
|
|
990
1299
|
|
|
@@ -1005,15 +1314,45 @@ const columns: STableColumn[] = [
|
|
|
1005
1314
|
| ํ๋ณ | ์ฌ์ฉ |
|
|
1006
1315
|
| --- | --- |
|
|
1007
1316
|
| ๋ ์ง **ํ๋**๋ฅผ ๊ฐ์ผ๋ก ๋ฐ๋๋ค | `SDatePicker` |
|
|
1317
|
+
| ์ฐ๋ ์ ํ ๋ฆฌ์คํธ๋ง ํ์ํ๋ค (ํธ๋ฆฌ๊ฑฐยทํ์ค๋ฒ๋ ์ง์ ์กฐํฉ) | `SDatePickerYearListbox` |
|
|
1318
|
+
| ์ฐ๋+์ ์ ํ ๋ฆฌ์คํธ๋ง ํ์ํ๋ค (ํธ๋ฆฌ๊ฑฐยทํ์ค๋ฒ๋ ์ง์ ์กฐํฉ) | `SDatePickerMonthListbox` |
|
|
1008
1319
|
| **์์~์ข
๋ฃ** ๋ฅผ ๊ฐ์ผ๋ก ๋ฐ๋๋ค | `SDateRangePicker` |
|
|
1009
1320
|
| ๋ฌ๋ ฅ ๊ฒฉ์ **์์ฒด๊ฐ ํ๋ฉด ์ฝํ
์ธ ** ๋ค (์ผ์ ยท์ด๋ฒคํธ ๋ณด๊ธฐ) | `SCalendar` |
|
|
1010
1321
|
|
|
1011
1322
|
- **๊ธฐ๊ฐ์ `SDatePicker` ๋ ๊ฐ๋ก ๋ง๋ค์ง ์๋๋ค.** ์์์ด ์ข
๋ฃ๋ณด๋ค ๋ค์ธ ์
๋ ฅ์ ๋ง๋ ๊ฒ์ฆ๊ณผ ํ์ชฝ๋ง ๊ณ ๋ฅธ ์ค๊ฐ ์ํ ์ฒ๋ฆฌ๊ฐ `SDateRangePicker` ์์ ์ด๋ฏธ ์๋ค. ๋ ๊ฐ๋ก ์ชผ๊ฐ๋ฉด ๊ทธ๊ฒ ์ ๋ถ ์ฑ ๋ชซ์ด ๋๋ค.
|
|
1012
1323
|
- `SDatePicker`ยท`SDateRangePicker` ๋ ๋ด๋ถ์ ์ผ๋ก `SCalendar` ๋ฅผ ํ์ค๋ฒ๋ก ๋์ด๋ค. ๊ฐ์ ๋ฐ๋ ์๋ฆฌ์ `SCalendar` ๋ฅผ ์ง์ ์ฐ์ง ์๋๋ค.
|
|
1324
|
+
- `SDatePickerYearListbox`ยท`SDatePickerMonthListbox` ๋ `SDatePicker` ์ mode listbox ์กฐ๊ฐ๋ง ๋ผ์ด๋ธ ์ปดํฌ๋ํธ๋ค. ์ผ๋ฐ ํผ ์
๋ ฅ์๋ `SDatePicker mode="year" | "month"` ๋ฅผ ์ฐ์ ์ฐ๊ณ , ๋ค๋ฅธ ํธ๋ฆฌ๊ฑฐยทํ์ค๋ฒ ์์ ๋ฆฌ์คํธ๋ง ๋ผ์ ๋ฃ์ ๋๋ง ์ง์ ์ด๋ค.
|
|
1325
|
+
|
|
1326
|
+
**๋ ์งยท์๊ฐ ํผ์ปค๋ ํญ ์ํ์ ์ค์ค๋ก ๊ฐ๋๋ค โ `width` ๋ฅผ ์ฃผ์ง ์๋๋ค.** ๊ฐ ๊ธธ์ด๊ฐ `YYYY-MM-DD` ์ฒ๋ผ ์ ํด์ ธ ์์ด ์ปดํฌ๋ํธ๊ฐ ์ฌ์ด์ฆ๋ณ ์ํ์ ์๋ค. `SKeyValueTable` ์ด ๋ชจ๋ ์ปจํธ๋กค์ `width="100%"` ๋ฅผ ๋๊ธฐ์ง๋ง, ์ด ์ํ ๋๋ถ์ ํ ์ ์ฒด๋ก ๋์ด๋์ง ์๊ณ ์ ํญ์์ ๋ฉ์ถ๋ค.
|
|
1327
|
+
|
|
1328
|
+
| ์ปดํฌ๋ํธ | `size="sm"` | `size="md"` |
|
|
1329
|
+
| --- | --- | --- |
|
|
1330
|
+
| `SDatePicker` | md | lg |
|
|
1331
|
+
| `SDateRangePicker` | lg | xl |
|
|
1332
|
+
| `STimePicker` | md | lg |
|
|
1333
|
+
| `STimeRangePicker` | md | lg (์ค์ /์คํ ํ์๋ ๋ ์ฌ์ด์ฆ ๋ชจ๋ lg) |
|
|
1334
|
+
|
|
1335
|
+
`SDateRangePicker` ๊ฐ ํ ๋ฑ๊ธ์ฉ ์์ธ ๊ฒ์ ๊ฐ์ด `YYYY-MM-DD ~ YYYY-MM-DD` ๋ก ๋ ๋ฐฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ ์ด์ ๋ก `STimeRangePicker` ์ ์ค์ /์คํ ๋ชจ๋๋ sm ์์ ํ ๋ฑ๊ธ ์๋ฅผ ์ด๋ค โ ๊ทธ ๋ชจ๋์ ์ต์ ํญ์ด md ๋ฑ๊ธ์ ์ด๋ฏธ ๋์ด, ๊ทธ๋๋ก ๋๋ฉด ํํ์ด ์ํ์ ๋์ด ์ํ์ด ๋ฌด๋ ฅํด์ง๋ค.
|
|
1336
|
+
|
|
1337
|
+
`SDatePicker` ๋ง ์ด ์ํ์ `maxWidth` ๋ก ๋ฎ์ ์ ์๋ค โ ๋ฑ๊ธ์ ์ฃผ๋ฉด ๊ทธ ๋ฑ๊ธ์ด ์ํ์ด ๋๊ณ , `width="100%" maxWidth="100%"` ๋ฉด ๋ถ๋ชจ ํญ์ ๊ทธ๋๋ก ์ฑ์ด๋ค. **ํญ์ด ์ด๋ฏธ ์ข๊ฒ ์ ํด์ง ์๋ฆฌ(ํ์ค๋ฒยท์ข์ ์นด๋)์์๋ง ์ด๋ค.** ํผยทํ ํ์์๋ ์ฐ์ง ์๋๋ค โ ๊ฑฐ๊ธฐ์ ์ํ์ ํ๋ฉด 4~10๊ธ์์ง๋ฆฌ ๊ฐ์ด ํ ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค.
|
|
1338
|
+
|
|
1339
|
+
##### ๊ฐ์ ์ง์ธ ์ ์๊ฒ ํ๋ ค๋ฉด `clearable`
|
|
1340
|
+
|
|
1341
|
+
`SSelect` ยท `SDatePicker` ยท `SDateRangePicker` ยท `STimePicker` ยท `STimeRangePicker` ๊ฐ ๊ฐ์ ๊ท์น์ผ๋ก ๊ฐ๋๋ค. ๊ฐ์ด ์์ ๋๋ง ์ง์ฐ๊ธฐ ๋ฒํผ์ด ๋ํ๋๊ณ , ๋๋ฅด๋ฉด **`onValueChange` ๋ก `null` ์ด ์จ๋ค** (๋น ๋ฌธ์์ด์ด ์๋๋ค). ๋ฐ๋ ์ชฝ ์ํ๋ `null` ์ ๋ด์ ์ ์์ด์ผ ํ๋ค.
|
|
1342
|
+
|
|
1343
|
+
```tsx
|
|
1344
|
+
const [from, setFrom] = useState<string | null>(null);
|
|
1345
|
+
|
|
1346
|
+
<SDatePicker label="์์์ผ" clearable value={from} onValueChange={setFrom} />;
|
|
1347
|
+
```
|
|
1348
|
+
|
|
1349
|
+
- **์กฐํ ์กฐ๊ฑด(ํํฐ)์๋ ์ผ ๋ค.** ํ ๋ฒ ๊ณ ๋ฅธ ๋ ์ง๋ฅผ ๋๋๋ฆด ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ ์ฒด ์กฐํ๋ก ๋์๊ฐ๋ ค๊ณ ์๋ก๊ณ ์นจํ๊ฒ ๋๋ค.
|
|
1350
|
+
- **ํ์ ์
๋ ฅ ํ๋์๋ ์ผ์ง ์๋๋ค.** ์ง์ฐ๋ฉด ๋ค์ ๊ณ ๋ฅด๊ธฐ ์ ๊น์ง ํผ์ด ํต๊ณผํ์ง ๋ชปํ๋ค โ ์ง์ธ ์ ์์ด์ผ ํ๋ ๊ฐ์ด๋ฉด ์ ์ด์ ํ์๊ฐ ์๋๋ค.
|
|
1351
|
+
- `disabled` ์ด๋ฉด ์ง์ฐ๊ธฐ ๋ฒํผ๋ ํจ๊ป ์ฌ๋ผ์ง๋ค. ๋ ํ๋๋ฅผ ์ง์ธ ์ ์์ผ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
1013
1352
|
|
|
1014
1353
|
#### 3-7-5. SField ๋ฅผ ์ง์ ์ฐ๋ ๊ฒฝ์ฐ
|
|
1015
1354
|
|
|
1016
|
-
**๊ฑฐ์ ์๋ค.** `SInput`ยท`SNumberInput`ยท`STextarea`ยท`SSelect`ยท๋ ์ง/์๊ฐ ํผ์ปค๋ ์ด๋ฏธ ๋ด๋ถ์์ `SField` ๋ฅผ ์ฐ๊ณ ์์ด์ `label`ยท`required`ยท์๋ฌ ํ์๋ฅผ ์๊ธฐ prop ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ ์์ `SField` ๋ฅผ ํ ๊ฒน ๋ ๊ฐ์ธ๋ฉด ๋ผ๋ฒจ์ด ๋ ๋ฒ ๋์จ๋ค.
|
|
1355
|
+
**๊ฑฐ์ ์๋ค.** `SInput`ยท`SNumberInput`ยท`STextarea`ยท`SEditor`ยท`SSelect`ยท๋ ์ง/์๊ฐ ํผ์ปค๋ ์ด๋ฏธ ๋ด๋ถ์์ `SField` ๋ฅผ ์ฐ๊ณ ์์ด์ `label`ยท`required`ยท์๋ฌ ํ์๋ฅผ ์๊ธฐ prop ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ ์์ `SField` ๋ฅผ ํ ๊ฒน ๋ ๊ฐ์ธ๋ฉด ๋ผ๋ฒจ์ด ๋ ๋ฒ ๋์จ๋ค.
|
|
1017
1356
|
|
|
1018
1357
|
์ง์ ์ฐ๋ ๊ฒฝ์ฐ๋ ํ๋๋ฟ์ด๋ค โ **๋์์ธ ์์คํ
์ ์๋ ์ปจํธ๋กค**์ ๋ค๋ฅธ ํ๋์ ๋๊ฐ์ ๋ผ๋ฒจยทํ์ยท์๋ฌ ๋ชจ์์ ๋ถ์ผ ๋.
|
|
1019
1358
|
|
|
@@ -1026,15 +1365,17 @@ const columns: STableColumn[] = [
|
|
|
1026
1365
|
| **์์ ์์ฒด๊ฐ ๋ฐ์ดํฐ**๋ผ ์ฌ์ฉ์๊ฐ ๋์ด์ ๋ฐ๊พผ๋ค | `SDraggableList` + `SDraggableItem` |
|
|
1027
1366
|
|
|
1028
1367
|
- **ํญ๋ชฉ ํ๋์ ์์ฑ์ ๋์ดํ๋ ๊ฒ์ ๋ชฉ๋ก์ด ์๋๋ค.** `๋ผ๋ฒจ: ๊ฐ` ์ด ์ธ๋ก๋ก ์์ด๋ ๊ฒ์ `SKeyValueTable` ์ด๋ค (ยง4-4).
|
|
1029
|
-
- `SList` ๋ ๋ ์ด์์๋ง ๋ด๋นํ๋ค.
|
|
1030
|
-
-
|
|
1031
|
-
-
|
|
1368
|
+
- `SList` ๋ ๋ ์ด์์๋ง ๋ด๋นํ๋ค. depth ๋ณ ๋จ์ผ ํผ์นจ์ด ํ์ํ๋ฉด `SExpansionList` ๋ค (ยง3-7-7).
|
|
1369
|
+
- **`SList` ์ ์์์ `SListItem` ์ ๊ถ์ฅํ๋ค.** ๋ค๋ฅธ ์์๋ ๊ทธ๋๋ก ๋ ๋๋์ง๋ง, ํผ์น๋ ํญ๋ชฉ์ `SExpansionList` + `SExpansionItem` ์ด, ๋์ด์ ์์๋ฅผ ๋ฐ๊พธ๋ ํญ๋ชฉ์ `SDraggableList` + `SDraggableItem` ์ด ์ฌ๋ซํยท์ ๋ ฌ ๋์๊น์ง ํจ๊ป ๊ด๋ฆฌํ๋ฏ๋ก ๊ทธ์ชฝ์ ์ด๋ค (ยง3-7-7).
|
|
1370
|
+
- **ํญ๋ชฉ ์ฌ์ด ๊ตฌ๋ถ์ ์ ๋ฆฌ์คํธ๊ฐ ์์์ ๊ทธ๋ฆฐ๋ค.** `SListItem`ยท`SExpansionItem`ยท`SDraggableItem` ์
๋ค ์ค์ค๋ก ๊ตฌ๋ถ์ ์ ๊ทธ๋ฆฌ์ง ์๋๋ค. `SList`ยท`SExpansionList`ยท`SDraggableList` ๊ฐ ์์ **์ฌ์ด์** ๊ตฌ๋ถ์ ์ ๋ฃ์ผ๋ฏ๋ก ์์ดํ
์ `border-b` ๋ฅผ ์ง์ ๋ถ์ด์ง ์๊ณ , ์ผ๋ prop ๋ ๋ฐ๋ก ์๋ค. ๋ง์ง๋ง ํญ๋ชฉ ์๋์๋ ์ ์ด ๋จ์ง ์๋๋ค. ํ
๋๋ฆฌํ(`bordered`)์ ํ
๋๋ฆฌ๊ฐ ๊ตฌ๋ถ ์ญํ ์ ํ๋ฏ๋ก ๋ฆฌ์คํธ๊ฐ ๊ตฌ๋ถ์ ์ ๋นผ๊ณ , `useGap` ์ผ๋ก ๋์ด๋ค โ `useGap` ์ ์ค ๋ชฉ๋ก์๋ ๊ตฌ๋ถ์ ์ ๋ค์ด๊ฐ์ง ์๋๋ค.
|
|
1371
|
+
- **`SListItem` ์ ๊ธฐ๋ณธ์ด ํ์ ์ ์ฉ์ด๋ค.** ๋๋ฌ์ ์ด๋ยท์ ํํ๊ฒ ํ๋ ค๋ฉด `clickable` ์ ์ค๋ค โ hoverยท`selected`ยท`interaction="chevron"` ํํ์ด ์ ๋ถ ์ฌ๊ธฐ์ ๋ธ๋ ค ์์ด์, `clickable` ์์ด `selected` ๋ง ์ฃผ๋ฉด ์ ํ ํ์๊ฐ ๋์ค์ง ์๋๋ค. `SExpansionList` ๋ ์์ ์์ดํ
์ ์์์ ํด๋ฆญ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์ด ํจ์ ์ ๋ง์ ์ค๋ค โ ์ ํ ์ํ ์์ฒด๋ ์ฑ์ด ๋ ๋ค (ยง3-7-7).
|
|
1032
1372
|
|
|
1033
1373
|
```tsx
|
|
1034
|
-
โ
<SList
|
|
1374
|
+
โ
<SList><SListItem title="์ผ๋ฐ ๋ฌธ์" />โฆ</SList> {/* ์ค๋ก ๊ตฌ๋ถ๋๋ ๋ชฉ๋ก โ ๊ตฌ๋ถ์ ์ ์๋ */}
|
|
1035
1375
|
โ
<SList useGap><SListItem title="์ผ๋ฐ ๋ฌธ์" bordered />โฆ</SList> {/* ์นด๋์ฒ๋ผ ๋จ์ด์ง ๋ชฉ๋ก */}
|
|
1036
1376
|
โ
<SListItem title="์ผ๋ฐ ๋ฌธ์" clickable selected onClick={โฆ} /> {/* ๋๋ฌ์ ๊ณ ๋ฅด๋ ๋ชฉ๋ก */}
|
|
1037
|
-
โ <SList><SListItem title="์ผ๋ฐ ๋ฌธ์" className="border-b" />โฆ</SList>
|
|
1377
|
+
โ <SList><SListItem title="์ผ๋ฐ ๋ฌธ์" className="border-b" />โฆ</SList> {/* ๊ตฌ๋ถ์ ์ ์ง์ ๋ถ์ด์ง ์๋๋ค */}
|
|
1378
|
+
โ <SList><><SListItem title="์ผ๋ฐ ๋ฌธ์" /><SListItem title="๊ฒฐ์ ๋ฌธ์" /></></SList> {/* Fragment ๋ก ๋ฌถ์ผ๋ฉด ๊ทธ ์์ชฝ์ ๊ตฌ๋ถ๋์ง ์๋๋ค */}
|
|
1038
1379
|
โ <SListItem title="์ผ๋ฐ ๋ฌธ์" selected /> {/* clickable ์์ผ๋ฉด ์ ํ ํ์๊ฐ ์ ๋์จ๋ค */}
|
|
1039
1380
|
```
|
|
1040
1381
|
|
|
@@ -1046,7 +1387,30 @@ const columns: STableColumn[] = [
|
|
|
1046
1387
|
| **ํ ๋ฒ์ ํ๋๋ง** ์ด๋ ค์ผ ํ๋ค (์์ฝ๋์ธ) | `SExpansionList` + `SExpansionItem` |
|
|
1047
1388
|
| **๋ถ๋ชจ-์์ ๊ณ์ธต ์์ฒด**๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค (2๋จ ์ด์, ์ฐ๊ฒฐ์ ) | `STree` |
|
|
1048
1389
|
|
|
1049
|
-
`SExpansionList` ๋ depth ๋ณ
|
|
1390
|
+
`SExpansionList` ๋ depth ๋ณ **๋จ์ผ ํ์ฅ**์ ๊ด๋ฆฌํ๋ wrapper ๋ค. ์ง์ `useState` ๋ก "์ด๋ฆฐ ํญ๋ชฉ ํ๋"๋ฅผ ๋ค๊ณ ์์ง ์๋๋ค. ํญ๋ชฉ ์ฌ์ด ๊ตฌ๋ถ์ ์ ์ฌ๊ธฐ์๋ ๋ฆฌ์คํธ๊ฐ ์์์ ๊ทธ๋ฆฐ๋ค โ ๋ฐ๋ก ์ค prop ์ด ์๋ค (ยง3-7-6).
|
|
1391
|
+
|
|
1392
|
+
##### ํผ์นจ โ ์ ํ
|
|
1393
|
+
|
|
1394
|
+
**ํผ์นจ์ ๋ฆฌ์คํธ๊ฐ ๊ด๋ฆฌํ๊ณ , ์ ํ์ ์ฑ์ด ๊ด๋ฆฌํ๋ค.**
|
|
1395
|
+
|
|
1396
|
+
ํผ์นจ์ ํ๋ฉด ๋ฐ์ ์ง์ค์ด ์๋ ์๊ฐ UI ์ํ๋ค. ๊ฐ ํญ๋ชฉ์ด ์๊ธฐ `expanded` ๋ฅผ ๋ค๊ณ ์์ผ๋ฉด "ํ๋๋ง ์ด๋ฆผ"์ ๋ง๋ค ์ ์์ด ๋๊ตฐ๊ฐ ๋๋จธ์ง๋ฅผ ๋ซ์์ผ ํ๊ณ , ๊ทธ๊ฒ์ด ์ด wrapper ๋ค.
|
|
1397
|
+
|
|
1398
|
+
์ ํ์ ๋ค๋ฅด๋ค. ์ฑ์ด `selectedId` ์ค์นผ๋ผ ํ๋๋ฅผ ๋ค๋ฉด ์ํธ๋ฐฐ์ ๊ฐ ๊ตฌ์กฐ์ ์ผ๋ก ๋ณด์ฅ๋๊ณ , ๊ทธ ๊ฐ์ URLยทstore ๋ก ๋ณต์๋ผ์ผ ํ๋ค. ๋ฆฌ์คํธ๊ฐ ์ฌ๋ณธ์ ๋ค๋ฉด ๊ทธ ์๊ฐ ์ง์ค์ด ๋์ด ๋์ด ์ด๊ธ๋๋ค.
|
|
1399
|
+
|
|
1400
|
+
```tsx
|
|
1401
|
+
const [selectedId, setSelectedId] = useState<string>();
|
|
1402
|
+
|
|
1403
|
+
<SExpansionList>
|
|
1404
|
+
{/* ํ์๊ฐ ์๋ ํญ๋ชฉ(์ ์ฒดยท๋ฏธ๋ถ๋ฅ)์ SExpansionItem ์ด ์๋๋ผ SListItem ์ด๋ค */}
|
|
1405
|
+
<SListItem title="์ ์ฒด" selected={selectedId === 'all'} onClick={() => setSelectedId('all')} />
|
|
1406
|
+
<SExpansionItem title="์กฐ์ง">
|
|
1407
|
+
<SListItem title="์์
ํ" selected={selectedId === 'sales'} onClick={() => setSelectedId('sales')} />
|
|
1408
|
+
</SExpansionItem>
|
|
1409
|
+
</SExpansionList>
|
|
1410
|
+
```
|
|
1411
|
+
|
|
1412
|
+
- `clickable` ์ ๋ฆฌ์คํธ๊ฐ ์์ `SListItem` ์ ๊ธฐ๋ณธ์ผ๋ก ์ผ ์ค๋ค โ `clickable` ์์ด `selected` ๋ง ์ฃผ๋ฉด ํ์๊ฐ ์ ๋์ค๋ ํจ์ (ยง3-7-6)์ ๋ง๋ ๊ฐ์ด๋ค.
|
|
1413
|
+
- **ํ์๋ฅผ ๊ฐ์ง์ง ์๋ ํญ๋ชฉ์ `SExpansionItem` ์ด ์๋๋ผ `SListItem`** ์ผ๋ก ๋๋ค. ํผ์น ๊ฒ์ด ์๋๋ฐ ํผ์นจ ํญ๋ชฉ์ผ๋ก ๋ง๋ค๋ฉด ํ์ดํ๋ง ๋จ๋๋ค.
|
|
1050
1414
|
|
|
1051
1415
|
#### 3-7-8. SCard vs SSectionHeaderCard
|
|
1052
1416
|
|
|
@@ -1057,7 +1421,23 @@ const columns: STableColumn[] = [
|
|
|
1057
1421
|
|
|
1058
1422
|
- ํ์ด์ง ๊ณจ๊ฒฉ์์ ์ฝํ
์ธ ๋ฅผ ๋ฌถ๋ ์น์
์ **์ฌ์ค์ ์ ๋ถ `SSectionHeaderCard`** ๋ค (ยง4-4ยทยง4-5). ์ ๋ชฉยทํ์ ํ์ยท๋์๋งยทํค๋ ์ฐ์ธก ์ก์
์ด ์ ๋ถ ์ฌ๊ธฐ ๋ถ๋๋ค.
|
|
1059
1423
|
- **์นด๋ ์์ ์นด๋๋ฅผ ๊ฒน์น์ง ์๋๋ค.** ์น์
์์ ๋ ๋๋ ์ผ ํ๋ฉด `SDivider` ๋ก ๋๊ฑฐ๋(ยง3-6) ์น์
์ ๋๋ก ๋ถ๋ฆฌํ๋ค.
|
|
1060
|
-
- ์์ชฝ ์ฌ๋ฐฑ์ `SSectionHeaderCard
|
|
1424
|
+
- ์์ชฝ ์ฌ๋ฐฑ์ `SSectionHeaderCard` ์ `padding` prop ์ผ๋ก ์ค๋ค โ `p-sd-*` ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค (ยง2-2).
|
|
1425
|
+
|
|
1426
|
+
**์นด๋๊ฐ ์๊ธฐ ์์์ ํ์ ํ๋ ์ก์
์ ๊ฐ์ง๋ฉด ํ๋จ ๋ฒํผ์ `children` ์ ์ง์ ๋์ง ์๋๋ค.** ๋ ์นด๋ ๋ชจ๋ ๋ชจ๋ฌยท๋๋ก์ด์ ๊ฐ์ ํ๋จ ์ก์
์์ญ์ ๊ฐ๋๋ค โ ์ฃผ ์ก์
์ `button`, ๋ณด์กฐ ๋ฒํผ์ `footerLeft` ๋ก ๋๊ธด๋ค(ยง3-3-4 ์ ๊ฐ์ ๊ท์น). ๋ฐฐ๊ฒฝยท์๋จ ๊ตฌ๋ถ์ ยท์ข์ฐ ์ฌ๋ฐฑยท์๋ ๋ถ๋ฆฌ๊ฐ ์ปดํฌ๋ํธ ๊ท์น๋๋ก ์กํ๊ณ , ์ข์ฐ ๋์ด ํค๋ยท๋ณธ๋ฌธ๊ณผ ๋ง๋๋ค. `footerLeft` ๋ ์ฌ๋กฏ์ด๋ผ `SButton` ์ ์ง์ ๋ฐฐ์นํ๋ฉฐ `size="md"` ๋ฅผ ๋ช
์ํ๋ค(ยง3-5-2).
|
|
1427
|
+
|
|
1428
|
+
```tsx
|
|
1429
|
+
{/* ์น์
์์์ ๋ฐ๋ก ์์ ยท์ ์ฅํ๋ ์ธ๋ผ์ธ ํผ ์น์
(ยง4-4) */}
|
|
1430
|
+
<SSectionHeaderCard
|
|
1431
|
+
title="๋ฐฐ์ก์ง"
|
|
1432
|
+
marker
|
|
1433
|
+
footerLeft={<SButton color="neutral" outline size="md" label="์ทจ์" onClick={reset} />}
|
|
1434
|
+
button={{ label: '์ ์ฅ', onClick: save }}
|
|
1435
|
+
>
|
|
1436
|
+
<SKeyValueTable โฆ />
|
|
1437
|
+
</SSectionHeaderCard>
|
|
1438
|
+
```
|
|
1439
|
+
|
|
1440
|
+
**ํ์ด์ง ์ ์ฒด๋ฅผ ํ์ ํ๋ ์ก์
์ ์นด๋ ํธํฐ๊ฐ ์๋๋ผ ํ์ด์ง ํ๋จ์ ๋๋ค.** ์นด๋ ํธํฐ๋ **๊ทธ ์นด๋ ์์์ ๋ซํ๋ ์ก์
**์ ์๋ฆฌ๋ค โ ์ฌ๋ฌ ์น์
์ ํ ๋ฒ์ ์ ์ฅํ๋ ๋ฒํผ์ ๋ง์ง๋ง ์นด๋์ ํธํฐ์ ๋ฃ์ผ๋ฉด ๊ทธ ์นด๋์๋ง ๊ฑธ๋ฆฌ๋ ์ก์
์ผ๋ก ์ฝํ๋ค. ์ด๋๋ ยง4-4 ์ฒ๋ผ ์นด๋ ๋ฐ ํ๋จ ์ค์ ๋๋ค.
|
|
1061
1441
|
|
|
1062
1442
|
#### 3-7-9. SLinearProgress vs SCircleProgress
|
|
1063
1443
|
|
|
@@ -1084,7 +1464,8 @@ const columns: STableColumn[] = [
|
|
|
1084
1464
|
- **๊ธฐ๋ณธ์ `SKeyValueTable` ์ด๋ค** (ยง4-2). ์กฐ๊ฑด์ด ๋์ฌ์ฏ ๊ฐ ์ดํ๋ก ๊ณ ์ ์ด๋ฉด ํ๋ก ํผ์ณ ๋๋ ํธ์ด ํ๋์ ์ฝํ๋ค.
|
|
1085
1465
|
- `SChipFilter` ๋ ์กฐ๊ฑด์ **์นฉ ํ ์ค**๋ก ์ ๊ณ , "ํํฐ ์ถ๊ฐ" ๋ก ํ์ํ ๊ฒ๋ง ๊บผ๋ด ์ฐ๊ฒ ํ๋ค. ์นฉ์ ๋๋ฅด๋ฉด ํธ์ง ํ์ค๋ฒ๊ฐ ์ด๋ฆฌ๊ณ , ๋ ์ง๋ ํ๋ฆฌ์
(์ค๋ยท์ง๋ 7์ผยท์ฌ์ฉ์ ์ง์ )์ผ๋ก ๊ณ ๋ฅธ๋ค. ์กฐ๊ฑด ํ๋ณด๊ฐ ๋ง์ ๋ชฉ๋ก ํ๋ฉด์์ ํํฐ๊ฐ ํ๋ฉด์ ์ธ๋ก๋ก ์ก์๋จน๋ ๊ฒ์ ๋ง๋ ์ฉ๋๋ค.
|
|
1086
1466
|
- ๊ฒ์ ์คํ ์์ ์ด ๋ค๋ฅด๋ค โ `SKeyValueTable` ํํฐ๋ ์ฑ์ด ๊ฒ์ ๋ฒํผ์ ์ง์ ๋์ง๋ง, `SChipFilter` ๋ ํธ์ง ํ์ค๋ฒ๊ฐ ๋ซํ๊ฑฐ๋ "๊ฒ์" ์ ๋๋ฅผ ๋ `onSearch` ๊ฐ ๊ฐ ๋งต๊ณผ ํจ๊ป ํธ์ถ๋๋ค. ๊ฐ์ด ๋ฐ๋์ง ์์์ผ๋ฉด ํธ์ถ๋์ง ์๋๋ค.
|
|
1087
|
-
-
|
|
1467
|
+
- **๋
ธ์ถํ ์นฉ์ ์ฑ์ด ๊ณ์ฐํ์ง ์๋๋ค.** ๋ฐ์ ๋์ด๋ ๊ฒ์ `fixed`ยท`required` ํ๋์ **`value` ์ ๊ฐ์ด ๋ค์ด ์๋ ํ๋**๋ค. ๋
ธ์ถ ๋ชฉ๋ก์ ๋ฐ์์ ๋๊ธฐ๋ prop ์ ์๋ค. ์ฟผ๋ฆฌ์คํธ๋งยท์๋ฒ ์ํ์์ ์กฐ๊ฑด์ ๋ณต์ํ๋ ๋ชฉ๋ก ํ๋ฉด๋ **`value` ๋ง ๋๊ธฐ๋ฉด ์นฉ์ด ํจ๊ป ์ด์๋๊ณ **, ๊ทธ ์กฐ๊ฑด์ ๋นผ๋ฉด ์นฉ๋ ํจ๊ป ๋น ์ง๋ค โ ์นฉ๊ณผ ์กฐํ ์กฐ๊ฑด์ด ์ด๊ธ๋ ์๋ฆฌ๊ฐ ์๋ค. "ํํฐ ์ถ๊ฐ" ๋ก ๊บผ๋ธ ํํฐ๋ ๊ฐ์ ๋ฃ๊ธฐ ์ ์๋ ์๋ฆฌ๋ฅผ ์งํค์ง๋ง, "๊ฒ์ ์ด๊ธฐํ" ๋ฅผ ๋๋ฅด๊ฑฐ๋ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ฉด ์ฌ๋ผ์ง๋ค. ๊ฑธ๋ฆฐ ์กฐ๊ฑด์ด ์์ผ๋ ๋ฌธ์ ๋์ง ์๋๋ค.
|
|
1468
|
+
- **`fields` ๋ ํญ์ ๊ทธ๋ฃน ๋ฐฐ์ด์ด๋ค.** ๋ฌถ์ ๊ฒ์ด ์์ด๋ `[{ fields: [...] }]` ๋ก ํ ๊ฒน ๊ฐ์ผ๋ค. ํจ๊ป ๊ฑธ์ด์ผ ํ๋ ์กฐ๊ฑด(์: ๊ธฐ๊ฐ ์ค ํ๋๋ ํ์)์ด ์์ผ๋ฉด ๊ทธ ํ๋๋ค๋ง ๋ณ๋ ๊ทธ๋ฃน์ผ๋ก ๋ผ์ด `rule` ์ ์ค๋ค โ ๊ท์น์ ๋ชป ์ฑ์ด ๋์ ๊ฒฝ๊ณ ํดํ์ด ๋ ์๊ณ `onSearch` ๊ฐ ๋งํ๋ค. ๊ทธ๋ฃน ์ ๊ตฌ๋ถ์ ์ `divider` ๋ก ์ผ ๋ค. ๊ฒ์ฆ ๋จ์์ ๊ตฌ๋ถ์ ์ ๋ณ๊ฐ๋ผ, ๋ฌถ์ด์ ๊ฒ์ฆ๋ง ํ๊ณ ์ถ์ผ๋ฉด `divider` ๋ฅผ ์ฃผ์ง ์๋๋ค.
|
|
1088
1469
|
|
|
1089
1470
|
#### 3-7-12. ์ด๋ฏธ์ง โ SImage
|
|
1090
1471
|
|
|
@@ -1129,15 +1510,27 @@ export default function AppShell({
|
|
|
1129
1510
|
children,
|
|
1130
1511
|
header,
|
|
1131
1512
|
scrollEndSpacing,
|
|
1132
|
-
|
|
1513
|
+
contentHeight,
|
|
1514
|
+
}: {
|
|
1515
|
+
children: React.ReactNode;
|
|
1516
|
+
header?: SPageHeaderProps;
|
|
1517
|
+
scrollEndSpacing?: boolean;
|
|
1518
|
+
contentHeight?: SPageContentHeight;
|
|
1519
|
+
}) {
|
|
1133
1520
|
return (
|
|
1134
1521
|
<SLayout type="box" header="fix">
|
|
1135
1522
|
{/* type/header/folded ๋ SLayout ์๋ง ์ค๋ค โ SGnb ๋ context ์์ ์ฝ๋๋ค */}
|
|
1136
1523
|
<SGnb items={MENU} value={current} onValueChange={navigate} logo={<Logo />} />
|
|
1137
1524
|
{/* ์ฝํ
์ธ ํจ๋ฉ์ SPage ๊ฐ ํ ํฐ์ผ๋ก ๋ฃ๋๋ค โ p-sd-* ๋ก ๋ฎ์ด์ฐ์ง ์๋๋ค */}
|
|
1138
|
-
{/*
|
|
1525
|
+
{/* ๋์ด ๋ชจ๋๋ ํ์ด์ง๊ฐ ์ ํ๋ค โ ๋๋ถ๋ถ contentHeight="fill" ์ด๋ค (ยง2-2) */}
|
|
1526
|
+
{/* ์คํฌ๋กค ๋ ์ฌ๋ฐฑ๋ SPage ๊ฐ ๋ฃ๋๋ค. ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋๋ ํ๋ฉด์์๋ง ์ผ ๋ค */}
|
|
1139
1527
|
{/* header ๋ ํ์ด์ง๋ง๋ค ๋ฌ๋ผ AppShell ์ด ๊ทธ๋๋ก ๋ฐ์ ๋๊ธด๋ค โ ํ์ด์ง ์ ๋ชฉ์ ์ฌ๊ธฐ์ ๋ง๋ค์ง ์๋๋ค */}
|
|
1140
|
-
<SPage
|
|
1528
|
+
<SPage
|
|
1529
|
+
background="frame"
|
|
1530
|
+
scrollEndSpacing={scrollEndSpacing}
|
|
1531
|
+
contentHeight={contentHeight}
|
|
1532
|
+
header={header}
|
|
1533
|
+
>
|
|
1141
1534
|
{children}
|
|
1142
1535
|
</SPage>
|
|
1143
1536
|
</SLayout>
|
|
@@ -1179,7 +1572,9 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1179
1572
|
|
|
1180
1573
|
**์ต์ ๋๋น๋ `SLayout` ์ด ๋ณด์ฅํ๋ค โ ์ฑ์ด `min-w-*` ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.** ์ฐฝ์ด ์ต์ ๋๋น(`SLAYOUT_MIN_WIDTH`, GNB ํฌํจํ ์ ์ฒด ๊ธฐ์ค)๋ณด๋ค ์ข์์ง๋ฉด GNBยท์๋จ๋ฐ๋ ์ ์๋ฆฌ์ ๋จ๊ณ **`SPage` ์์๋ง ๊ฐ๋ก ์คํฌ๋กค์ด ์๊ธด๋ค.** ๋ฌธ์(๋ธ๋ผ์ฐ์ ์ฐฝ)์๋ ๊ฐ๋ก ์คํฌ๋กค์ด ์๊ธฐ์ง ์๋๋ค. ๊ทธ๋์ ์
ธ์ ๊ฐ์ธ๋ ์์์ `min-width` ๋ `overflow-x` ๋ฅผ ๊ฑธ์ง ์๋๋ค โ ๊ฑธ๋ฉด ์ฐฝ ์ ์ฒด๊ฐ ์คํฌ๋กค๋์ด GNB ๊ฐ ํ๋ฉด ๋ฐ์ผ๋ก ๋ฐ๋ฆฐ๋ค.
|
|
1181
1574
|
|
|
1182
|
-
**์
ธ์ `SPage` ๋ ๋ชจ๋ ํ์ด์ง๊ฐ ๊ณต์ ํ๋ฏ๋ก,
|
|
1575
|
+
**์
ธ์ `SPage` ๋ ๋ชจ๋ ํ์ด์ง๊ฐ ๊ณต์ ํ๋ฏ๋ก, ํ์ด์ง๋ง๋ค ๋ฌ๋ผ์ง๋ ๊ฒ์ ํ์ด์ง๊ฐ ์
ธ์ ์๋ ค์ผ ํ๋ค.** ์์ฒ๋ผ ํ๋ ์ ์ปดํฌ๋ํธ๊ฐ `contentHeight` ยท `scrollEndSpacing` ์ ๋ฐ์ ๊ทธ๋๋ก ๋๊ธด๋ค.
|
|
1576
|
+
|
|
1577
|
+
**๋๋ถ๋ถ์ ํ์ด์ง๋ `contentHeight="fill"` ์ด๋ค** โ ๋ณธ๋ฌธ์ด ์ฐฝ์ ๊ฝ ์ฑ์ฐ๊ณ ์คํฌ๋กค์ ๊ฐ ์์ญ ์์์ ์ผ์ด๋๋ ๊ฒ์ด ํ์ค์ด๋ค(ยง2-2). ๋ธ๋ก์ ๋์ด๊ฐ ์ ํด์ ธ ์๊ณ ๊ทธ ๋์ด๊ฐ ์ฐฝ๋ณด๋ค ์ปค์ ํ์ด์ง ์์ฒด๊ฐ ์คํฌ๋กค๋ผ์ผ ํ๋ ํ๋ฉด์์๋ง `contentHeight="auto"`(๊ธฐ๋ณธ๊ฐ) + `scrollEndSpacing` ์ ์ผ ๋ค.
|
|
1183
1578
|
|
|
1184
1579
|
**์๋จ๋ฐ ๋ฐฐ์น๋ `header` ๊ฐ ์ ํ๋ค.** ์์ ์์๊ฐ ๋ฌ๋ผ์ง๋ฏ๋ก ์ฌ๋กฏ์ ์ฑ์ฐ๊ธฐ ์ ์ ์ด๋ ์ชฝ์ธ์ง๋ถํฐ ์ ํ๋ค.
|
|
1185
1580
|
|
|
@@ -1201,7 +1596,7 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1201
1596
|
topContent={
|
|
1202
1597
|
/* ๋จ๋ ํญ ์ ์ฒด๋ฅผ ๋ฐ๋๋ค โ ์ผ์ชฝ์ ๊ทธ๋๋ก, ์ค๋ฅธ์ชฝ ๋์ ml-auto */
|
|
1203
1598
|
<div className="flex w-full items-center gap-sd-8">
|
|
1204
|
-
<
|
|
1599
|
+
<SSearchInput value={keyword} onValueChange={setKeyword} onSearch={runSearch} placeholder="ํตํฉ ๊ฒ์" />
|
|
1205
1600
|
<SButton size="sm" color="neutral" outline label="๋ด ๊ณ์ " className="ml-auto" onClick={openAccount} />
|
|
1206
1601
|
</div>
|
|
1207
1602
|
}
|
|
@@ -1218,7 +1613,7 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1218
1613
|
{/* ์ ํ๋ฉด menuTopยทmenuFooter ๊ฐ ํจ๊ป ๋น ์ง๋ฏ๋ก, ํด๋ ๋ ์ผ์ ๋จ๊ธธ ๊ฒ๋ง foldedTop ์ผ๋ก ๋ฐ๋ก ์ค๋ค */}
|
|
1219
1614
|
<SGnb
|
|
1220
1615
|
items={MENU} value={current} onValueChange={navigate} useRail
|
|
1221
|
-
menuTop={<
|
|
1616
|
+
menuTop={<SSearchInput value={keyword} onValueChange={setKeyword} placeholder="๋ฉ๋ด ๊ฒ์" />}
|
|
1222
1617
|
menuFooter={<AccountRow />}
|
|
1223
1618
|
foldedTop={<SGhostButton icon="search" size="sm" ariaLabel="๋ฉ๋ด ๊ฒ์" onClick={openSearch} />}
|
|
1224
1619
|
/>
|
|
@@ -1226,6 +1621,37 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1226
1621
|
|
|
1227
1622
|
์ฌ๋กฏ ์์ชฝ ์ฌ๋ฐฑ์ **์ฌ๋กฏ ๋ด์ฉ์ด ์ง์ ๊ฐ๋๋ค** โ ์ปดํฌ๋ํธ๋ ์๋ฆฌ๋ง ์ก๋๋ค(ํด๋ ์ฌ๋กฏ๋ง ์ข์ ํญ์ ๋ง์ถฐ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๋ค). ๋ฉ๋ด ํญ์ `resizable` ๋ก ๋ฐ๋ ์ ์์ผ๋ฏ๋ก ์ฌ๋กฏ ๋ด์ฉ์ ๊ณ ์ ํญ ๋์ `w-full` ๋ก ๋ฐ๋ผ๊ฐ๊ฒ ๋๋ค.
|
|
1228
1623
|
|
|
1624
|
+
#### GNB ๋งจ ์๋์ system ํจ๋
|
|
1625
|
+
|
|
1626
|
+
**์๋น์ค ์ ํยท๋๋ฉ์ธยท์๋ฆผยท์ค์ ยท๊ณ์ ์ฒ๋ผ "์ง๊ธ ์ด๋ค ์๊ฒฉ์ผ๋ก ๋ณด๊ณ ์๋๊ฐ" ๋ฅผ ๋ค๋ฃจ๋ ๋ฌถ์์ `SGnbSystem` ์ `SGnb` ์ `system` ์ฌ๋กฏ์ ๋ฃ๋๋ค.** ์ด ์กฐ๊ฐ๋ค์ `menuFooter` ์ ์์ผ๋ก ์กฐ๋ฆฝํ์ง ์๋๋ค โ ํจ๋์ ๋ฐฐ๊ฒฝยท์์ชฝ ๊ฒฝ๊ณยท๊ตฌ๋ถ์ ยทํ ๊ฐ๊ฒฉ์ด ์ ๋ถ ํ ํฐ์ผ๋ก ์ ํด์ ธ ์์ด ์ง์ ๋ง๋ค๋ฉด ์ด๊ธ๋๋ค.
|
|
1627
|
+
|
|
1628
|
+
`system` ์ ๋ค๋ฅธ ์ฌ๋กฏ๊ณผ ๋ฌ๋ฆฌ **ํผ์นจยท์ ํ ์์ชฝ์ ํผ์ ๋งก๋๋ค** โ ํผ์น๋ฉด ๋ฉ๋ด ์ปฌ๋ผ ๋ฐ๋ฅ์, ์ ํ๋ฉด(`header="fix"`) `foldedFooter` ์๋ ๋ ์ผ ๋ฐ๋ฅ์ ์ฌ๋ฐฑ ์์ด ๋ถ๋๋ค. ๊ทธ๋์ `menuFooter`/`foldedFooter` ๋ก ๋๋ ์ค ํ์๊ฐ ์๋ค.
|
|
1629
|
+
|
|
1630
|
+
```tsx
|
|
1631
|
+
<SGnb
|
|
1632
|
+
items={MENU} value={current} onValueChange={navigate} logo={<Logo />}
|
|
1633
|
+
system={
|
|
1634
|
+
<SGnbSystem
|
|
1635
|
+
/* ์๋จ์ ์๋ ํ โ SSystemActionButton ์ props ๋ฐฐ์ด์ด๋ค (ยง3-5). color ๋ ๋๊ธฐ์ง ์๋๋ค */
|
|
1636
|
+
actions={[{ type: 'select', label: '์๋น์ค ์ ํ', option: { icon: 'robot' }, onClick: openServices }]}
|
|
1637
|
+
domain={domainName}
|
|
1638
|
+
alert={{ count: unreadCount, onClick: openAlerts }}
|
|
1639
|
+
setting={{ onClick: openSettings }}
|
|
1640
|
+
account={{ label: userName, onClick: openAccount }}
|
|
1641
|
+
/>
|
|
1642
|
+
}
|
|
1643
|
+
/>
|
|
1644
|
+
```
|
|
1645
|
+
|
|
1646
|
+
- **`color` ์ `folded` ๋ฅผ ์ฃผ์ง ์๋๋ค.** `system` ์ฌ๋กฏ์ ์์ผ๋ฉด GNB ๊ฐ ์๊ธฐ ์๊ณผ ์ ํ ํํ๋ฅผ ๋ด๋ ค์ค๋ค. ๋ prop ์ GNB ๋ฐ์์ ์ด ํจ๋์ ๋จ๋
์ผ๋ก ์ธ ๋๋ง ์ค๋ค.
|
|
1647
|
+
- **๊ฐ ์กฐ๊ฐ์ ํด๋น prop ์ ์ค ๋๋ง ๋ํ๋๋ค โ ์ด๋ค ์กฐํฉ์ด์ด๋ ๊ทธ๊ฒ๋ง์ผ๋ก ํ์ด ์ฑ๋ฆฝํ๋ค.** ๊ณ์ ๋ง, ์๋ฆผ๋ง, ์ค์ ๋ง, ์๋ฆผ+๊ณ์ โฆ ์๋น์ค๊ฐ ์ฐ๋ ๊ฒ๋ง ๋๊ธด๋ค. ์กฐ๊ฐ์ ๋นผ๋ ค๊ณ ๋น ๋ฌธ์์ด์ด๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ฃ์ง ์๋๋ค(`setting={{}}` ์ "์ค์ ๋ฒํผ์ ์ด๋ค" ๋ ๋ป์ด๋ค).
|
|
1648
|
+
- ๊ตฌ๋ถ์ ์ **์์๋ ์์ชฝ์ ๋ด์ฉ์ด ์์ ๋๋ง** ๊ทธ์ด์ง๋ค โ `actions` ๋ง ๋๊ฒจ๋ ๋ฐ๋ฅ์ ๋ป ์๋ ์ ์ด ๋จ์ง ์๋๋ค.
|
|
1649
|
+
- ์๋ฆผยท์ค์ ์ **ํผ์ ์๋ฉด ํญ์ ๋ค ๋จน๊ณ **, ๋์ด ๋๋ํ ์๋ฉด ์๋ฆผ์ด ๋จ๋ ํญ์ยท์ค์ ์ด ์ ํญ์ ๊ฐ๋๋ค. ์ด๋ ์ชฝ์ด ๋น ์ ธ๋ ์ผ์ชฝ ๋์ ์์๋ ํ๊ณผ ๋ง์ผ๋ฏ๋ก ์ฑ์ด ์ ๋ ฌ์ ๋ง์ถ ์ผ์ด ์๋ค.
|
|
1650
|
+
- **์ผ์ง ์กฐ๊ฐ์ด ํ๋๋ ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋์ง ์๋๋ค.** ์กฐ๊ฑด๋ถ๋ก ์กฐ๊ฐ์ด ๋ค ๋น ์ง๋ ํ๋ฉด์์๋ GNB ๋ฐ๋ฅ์ ๋น ํ์ด ๋จ์ง ์๋๋ค.
|
|
1651
|
+
- **์ ํ๋ฉด ์๋ฆผยท๊ณ์ ์์ด์ฝ๋ง ๋จ๋๋ค** โ `actions`ยท`domain`ยท`setting` ์ 48px ํญ์ ๋์ ์๋ฆฌ๊ฐ ์์ด ๋ ๋๋์ง ์๊ณ , ์๋ฆผ ๊ฐ์๋ ์ ๋ฐฐ์ง๊ฐ ๋๋ค. **์๋ฆผ๋ ๊ณ์ ๋ ์ ์ฐ๋ ์กฐํฉ์ด๋ฉด ์ ํ ํจ๋์ ์์ ๋ ๋๋์ง ์๋๋ค** โ ์ ํ ์ํ์์๋ ๋ฐ๋์ ๋๋ฌ์ผ ํ๋ ๊ฒ์ด ๊ทธ ๋ ๋ฐ์ ์์ผ๋ฉด `foldedTop`/`foldedFooter` ๋ก ๋ฐ๋ก ์ค๋ค.
|
|
1652
|
+
- **์๋ฆผ ๊ฐ์๋ `alert.count` ํ๋๋ก ํํํ๋ค.** 1 ์ด์์ด๋ฉด ๋ฒจ์ด ์ธ๋ฆฌ๋ ์์ด์ฝ๊ณผ ๊ฐ์กฐ์์ผ๋ก ๋ฐ๋๋ค โ ์์ GNB ์์ด ์ ํ๋ฏ๋ก ์ฑ์ด ์ง์ ์น ํ์ง ์๋๋ค.
|
|
1653
|
+
- **`useRail` ์์ ํ์ ๋ฉ๋ด๊ฐ ์๋ ๋ ์ผ ์์ดํ
์ด ํ์ฑ์ด๋ฉด ๋ฉ๋ด ์ปฌ๋ผ์งธ ์ฌ๋ผ์ง๋ฏ๋ก ์ด ํจ๋๋ ํจ๊ป ๋น ์ง๋ค.** ํญ์ ๋ณด์ฌ์ผ ํ๋ ๊ณ์ ยท์๋ฆผ์ด๋ผ๋ฉด ๊ทธ๋ฐ ๋ ์ผ ๋ฆฌํ๋ฅผ ๋์ง ์๋๋ค.
|
|
1654
|
+
|
|
1229
1655
|
### 4-2. ๋ชฉ๋ก ํ์ด์ง (ํํฐ + ํ
์ด๋ธ)
|
|
1230
1656
|
|
|
1231
1657
|
๊ตฌ์กฐ: **ํ์ด์ง ํค๋(`AppShell` ์ `header` prop, ๊ฐ์ด๋ ๋ฑ ๋ถ๊ฐ ์ก์
์ slot) โ ํํฐ(`SKeyValueTable`) โ `STableBar` โ `STable`**
|
|
@@ -1237,7 +1663,10 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1237
1663
|
- **ํ์ด์ง ์ ๋ชฉ ์ค์๋ ์ด ํ์ด์ง์ ์ฃผ์ ์ก์
์ ๋์ง ์๋๋ค.** ๋ถ๊ฐ์ ์ธ ๊ฒ๋ง `header.slot` ์ `SButton size="sm"` ์ผ๋ก ์จ๋ค (ยง4-1 "ํ์ด์ง ํค๋ ์ฌ์ฉ ๊ท์น").
|
|
1238
1664
|
- **์ฃผ์ ์ก์
(๋ฑ๋ก ๋ฑ)์ `STableBar` ์ `rightActions`** ์ ๋๋ค.
|
|
1239
1665
|
- **์ ํ ์ํ ์ก์
(์ ํ ์ญ์ ๋ฑ)์ `STableBar` ์ `actions`** ์ ๋๋ค. `actions` ์ฌ๋กฏ์ ๊ฑด์ ์์ฝ์ด ์์ผ๋ฉด ์์ ๊ตฌ๋ถ์ (`SDivider`)์ **์๋์ผ๋ก** ๋ฃ์ผ๋ฏ๋ก ์ง์ ๊ตฌ๋ถ์ ์ ๋ง๋ค์ง ์๋๋ค.
|
|
1240
|
-
-
|
|
1666
|
+
- **๋ณธ๋ฌธ์ด ๋จ์ ๋์ด๋ฅผ ์ฑ์ฐ๊ฒ ํ๋ค** โ `AppShell` ์ `contentHeight="fill"` ์ ๋๊ธด๋ค(ยง2-2 ํ์ค). ํ์ด์ง๊ฐ ํต์งธ๋ก ์คํฌ๋กค๋๋ฉด ํ์ด์ง๋ค์ด์
์ด ํ๋ฉด ๋ฐ์ผ๋ก ๋ฐ๋ ค "์ฌ๊ธฐ์ ๋"์ด ์ฝํ์ง ์๋๋ค. `fill` ์ด๋ฉด **ํ๋ง ์๊ธฐ ์์์ ์คํฌ๋กคํ๊ณ ํ์ด์ง๋ค์ด์
์ ํ๋จ์ ๊ณ ์ **๋๋ค.
|
|
1667
|
+
- ๋ณธ๋ฌธ ๋ฃจํธ์ `h-full min-h-0` ์ผ๋ก ์ธ๋ก ์ถ์ ์๊ณ , ๋จ์ ๋์ด๋ฅผ ๋จน์ `STable` ์ `min-h-0 flex-1` ์ ์ค๋ค. ์ด ์ฌ์ฌ์ด ํ๋๋ผ๋ ๋๊ธฐ๋ฉด ํ๊ฐ ๋์ด๋ฅผ ๋ชป ์ก๋๋ค.
|
|
1668
|
+
- `fill` ์์๋ ํ์ด์ง๊ฐ ์คํฌ๋กคํ์ง ์์ผ๋ฏ๋ก **`scrollEndSpacing` ์ ๋ฌด์๋๋ค** โ ๋ฐ๋ก ๋์ง ์๋๋ค (ยง2-2).
|
|
1669
|
+
- **์ ๋ ฌ ๊ฐ๋ฅํ ์ปฌ๋ผ์ `sortable` ๋ก ์ค๋ค.** ์ ๋ ฌ ์ํ(`sort`)๋ ์ด ํ์ด์ง๊ฐ ๋ค๊ณ `onSortChange` ๋ก ๋ฐ๋๋ค โ ์กฐํ ์กฐ๊ฑด์ด๋ผ URL ์ ์ค๋ ค์ผ ํ๋ค (ยง3-4).
|
|
1241
1670
|
|
|
1242
1671
|
```tsx
|
|
1243
1672
|
import {
|
|
@@ -1285,9 +1714,10 @@ export default function ProductListPage() {
|
|
|
1285
1714
|
// ์ด ํ์ด์ง์ ์ฃผ์ ์ก์
์ด ์๋๋ผ ๋ถ๊ฐ ์ก์
โ slot ์ sm ๋ฒํผ์ผ๋ก๋ง ์ฑ์ด๋ค
|
|
1286
1715
|
slot: <SButton size="sm" color="neutral" outline label="์ด์ฉ ๊ฐ์ด๋" onClick={openGuide} />,
|
|
1287
1716
|
}}
|
|
1288
|
-
|
|
1717
|
+
contentHeight="fill" // ํ๊ฐ ๋จ์ ๋์ด๋ฅผ ์ฑ์ฐ๊ณ ํ์ด์ง๋ค์ด์
์ด ํ๋จ์ ๊ณ ์ ๋๋ค
|
|
1289
1718
|
>
|
|
1290
|
-
|
|
1719
|
+
{/* h-full min-h-0 โ STable ์ min-h-0 flex-1 ๋ก ์ธ๋ก ์ถ์ด ์ด์ด์ง๋ค */}
|
|
1720
|
+
<div className="flex h-full min-h-0 flex-col gap-sd-12">
|
|
1291
1721
|
{/* ํํฐ โ search ๋ฅผ ์ผ๋ฉด ์ฐ์ธก์ ๊ฒ์ ํจ๋์ด ๋ถ๋๋ค */}
|
|
1292
1722
|
<SKeyValueTable
|
|
1293
1723
|
fields={filterFields}
|
|
@@ -1312,7 +1742,9 @@ export default function ProductListPage() {
|
|
|
1312
1742
|
}
|
|
1313
1743
|
/>
|
|
1314
1744
|
|
|
1745
|
+
{/* ๋จ์ ๋์ด๋ฅผ ์ฑ์ฐ๊ณ ๋ณธ๋ฌธ๋ง ์คํฌ๋กคํ๋ค โ ํ์ด์ง๋ค์ด์
๋ฐ๋ ํ ์์์ ํ๋จ ๊ณ ์ */}
|
|
1315
1746
|
<STable
|
|
1747
|
+
className="min-h-0 flex-1"
|
|
1316
1748
|
columns={columns}
|
|
1317
1749
|
rows={rows}
|
|
1318
1750
|
rowKey="id"
|
|
@@ -1328,6 +1760,33 @@ export default function ProductListPage() {
|
|
|
1328
1760
|
}
|
|
1329
1761
|
```
|
|
1330
1762
|
|
|
1763
|
+
#### ํ ํ๋ฉด์ ๋ ๋ง์ ํ์ โ `dense` ์ ๋ฐ๋ ํ ๊ธ
|
|
1764
|
+
|
|
1765
|
+
ํ ๋์ด๋ฅผ ์ค์ด๋ ๊ฒ์ `dense` ๋ค. ์ธ๋ก ์ฌ๋ฐฑ๋ง ์ค๊ณ ์ข์ฐ ํจ๋ฉ์ ๊ทธ๋๋ก๋ผ, ๊ฐ์ด ์๋ฆฌ์ง ์์ผ๋ฉด์ ํ ํ๋ฉด์ ๋ค์ด๊ฐ๋ ํ ์๊ฐ ๋์ด๋๋ค.
|
|
1766
|
+
|
|
1767
|
+
**์ด๋ ์ชฝ์ด ํธํ์ง๋ ํ๋ฉด์ด ์๋๋ผ ์ฌ์ฉ์๊ฐ ์๋ค.** ๊ทธ๋์ `dense` ๋ ๋ฐ๋๋ฅผ ๊ณ ์ ํ๋ ์ค์์น๊ฐ ์๋๋ผ **์์ ๋ฐ๋์ด์ ๋ฐ๋ ํ ๊ธ์ ์ค์์น**๋ค โ ์ผ๋ฉด ํ๋จ ๋ฐ ์ฐ์ธก(rows per page ์
๋ ํธ ์ผ์ชฝ)์ `์ข๊ฒ ๋ณด๊ธฐ` ยท `๋๊ฒ ๋ณด๊ธฐ` ๋งํฌ๊ฐ ๋ถ๋๋ค. ์ผ๊ณ ๋๋ ๋ณ๋ prop ์ ์๋ค.
|
|
1768
|
+
|
|
1769
|
+
```tsx
|
|
1770
|
+
// ์ข๊ฒ ์์ํ๊ณ , ์ฌ์ฉ์๊ฐ ๋ฐ๊พธ๋ ๋ฐ๋๋ ํ๊ฐ ์์์ ๋ค๊ณ ๊ฐ๋ค
|
|
1771
|
+
<STable dense useRowsPerPageSelect pagination={{ currentPage, lastPage }} />;
|
|
1772
|
+
|
|
1773
|
+
// ์ฌ์ฉ์๊ฐ ๊ณ ๋ฅธ ๋ฐ๋๋ฅผ ๋ค์ ๋ฐฉ๋ฌธ์๋ ๋จ๊ธฐ๋ ค๋ ํ๋ฉด๋ง ๋ฐ์์ ์ ์ฅํ๋ค.
|
|
1774
|
+
// ์ ์ฅํ ๊ฐ์ ์์ ๋ฐ๋๋ก๋ง ๋๋ ค์ค๋ค โ ๋๋๋ ค ๋ฃ์ง ์๋๋ค
|
|
1775
|
+
const [initialDense] = useState(() => loadPref('list.dense', true));
|
|
1776
|
+
|
|
1777
|
+
<STable
|
|
1778
|
+
dense={initialDense}
|
|
1779
|
+
onDenseChange={next => savePref('list.dense', next)}
|
|
1780
|
+
useRowsPerPageSelect
|
|
1781
|
+
pagination={{ currentPage, lastPage }}
|
|
1782
|
+
/>;
|
|
1783
|
+
```
|
|
1784
|
+
|
|
1785
|
+
- **๋๋ฅธ ๋ค์ ๋ฐ๋๋ `STable` ์ด ๋ด๋ถ ์ํ๋ก ๋ค๊ณ ๊ฐ๋ค.** `onDenseChange` ์์ด๋ ํ ๊ธ์ ๋์ํ๋ค. ์ ์ฅ์ด ํ์ํ ํ๋ฉด๋ง ๋ฐ์์ ์ ์ฅํ๋ฉด ๋๋ค.
|
|
1786
|
+
- **`dense` ์ `onDenseChange` ๊ฐ์ ๋๋๋ ค ๋ฃ์ง ์๋๋ค.** ํ ๊ธ์ ๋ถ์ผ์ง๋ ์ด prop ์ด ์ ํ๋ฏ๋ก, ๋๊ฒ ๋ณธ ์๊ฐ `dense` ๊ฐ `false` ๊ฐ ๋๋ฉด ํ ๊ธ์ด ์ฌ๋ผ์ ธ ๋ค์ ์ขํ ๊ธธ์ด ์๋ค. prop ๊ฐ์ ๋ฐ๊ฟ ๋๊ธฐ๋ ๊ฒ์ ์ธ๋ถ ๋ฒํผ ๋ฑ์ผ๋ก ๋ฐ๋๋ฅผ **๋๋๋ฆด ๋**๋ง ์ด๋ค โ ๋ด๋ถ ๋ฐ๋๊ฐ ๊ทธ ๊ฐ์ผ๋ก ๋ง์ถฐ์ง๋ค.
|
|
1787
|
+
- **`dense` ๋ฉด ํ์ด์ง๋ค์ด์
์ด ์์ด๋ ํ ๊ธ์ด ๋์จ๋ค** โ ํ๋จ ๋ฐ๋ฅผ ํ ๊ธ๋ง ๋ด์ ๊ทธ๋ฆฐ๋ค. `dense` ๊ฐ ์๋๋ฉด ํ ๊ธ๋ ์๋ค.
|
|
1788
|
+
- ๋ผ๋ฒจ๊ณผ ์์ด์ฝ์ ํ์ฌ ์ํ๊ฐ ์๋๋ผ **๋๋ฅด๋ฉด ๋๋ ์ํ**๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ข๊ฒ ๋ณด๊ณ ์์ผ๋ฉด `๋๊ฒ ๋ณด๊ธฐ` ๋ค.
|
|
1789
|
+
|
|
1331
1790
|
### 4-3. ํผ ํ์ด์ง (๋ฑ๋ก/์์ )
|
|
1332
1791
|
|
|
1333
1792
|
๊ตฌ์กฐ: **ํ์ด์ง ์ ๋ชฉ(`AppShell` ์ `header` prop) โ `SForm` + `SKeyValueTable` โ ํ๋จ ๋ฒํผ**
|
|
@@ -1335,6 +1794,19 @@ export default function ProductListPage() {
|
|
|
1335
1794
|
- ํ๋๋ฅผ `div` ๋ก ๋์ดํ์ง ์๊ณ **`SKeyValueTable` ์ ํ์ผ๋ก ๊ตฌ์ฑ**ํ๋ค.
|
|
1336
1795
|
- ๊ฒ์ฆ ๊ท์น์ ๊ฐ field ์ `options.rules` ๋ก ๋๊ธด๋ค. `SForm` ์ด ํ์ ์ปจํธ๋กค์ ์๋ ์์งํด submit ์ ์ผ๊ด ๊ฒ์ฆํ๊ณ , ์คํจ ์ ์ฒซ ์คํจ ํ๋๋ก ํฌ์ปค์ค๋ฅผ ์ฎ๊ธด๋ค.
|
|
1337
1796
|
- **๋ฒํผ ์์: ์ทจ์ยท๋ซ๊ธฐ๊ฐ ์ผ์ชฝ, ์ ์ฅยท๋ฑ๋กยท์์ ยท์ญ์ ๊ฐ ์ค๋ฅธ์ชฝ.** ์ด ์์๋ ๋ชจ๋ ํ๋ฉด์์ ๋์ผํ๋ค.
|
|
1797
|
+
- **ํผ ํ์ด์ง๋ `contentHeight="fill"` ์ด ๊ธฐ๋ณธ์ด๋ค**(ยง2-2). ํผ์ด ๊ธธ์ด ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋๋ ํ๋ฉด์์๋ง `auto` + `scrollEndSpacing` ์ ์ผ ๋ค.
|
|
1798
|
+
- **ํ๋ ํญ์ ๋ฑ๊ธ์ผ๋ก ์ค๋ค** โ `width="md"` ์ฒ๋ผ `'xs' | 'sm' | 'md' | 'lg' | 'xl'` ์ค ํ๋๋ค. px ๋ฅผ ์ง์ ์ ์ง ์๋๋ค. ๋ฑ๊ธ์ `maxLength`(= ์คํค๋ง ์ํ)๋ก ๊ณ ๋ฅด๊ณ , ์ํ์ด `xl` ์ ๋๊ฑฐ๋ ์ํ์ด ์์ผ๋ฉด `width="100%"` ๋ก ํ ์ ์ฒด๋ฅผ ์ด๋ค (ยง6 `field-width-grade`).
|
|
1799
|
+
|
|
1800
|
+
**`SKeyValueTable` ์ ์ ์ฒด ์ด ์๋ ๊ฐ์ฅ ๊ธด ํ์ด ์ ํ๋ค.** ์ด๋ค ํ์ด ๊ทธ๋ณด๋ค ์งง์ผ๋ฉด ๋จ๋ ์๋ฆฌ์ ์
์ด ์์ด ๊ทธ ๊ตฌ๊ฐ์ ํ ๊ตฌ๋ถ์ ์ด ๋๊ธด๋ค. ๋ง์ง๋ง ํ๋์ `tdColSpan` ์ ์ฃผ์ด ์ฑ์ด๋ค.
|
|
1801
|
+
|
|
1802
|
+
```tsx
|
|
1803
|
+
[
|
|
1804
|
+
[{ name: 'category', โฆ }, { name: 'price', โฆ }], // ํ๋ 2๊ฐ โ 4์นธ
|
|
1805
|
+
[{ name: 'memo', โฆ, tdColSpan: 3 }], // th(1) + td(3) = 4์นธ
|
|
1806
|
+
]
|
|
1807
|
+
```
|
|
1808
|
+
|
|
1809
|
+
**ํ ํ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋ค๋ฅธ ํ๋ค์ `tdColSpan` ๋ ํจ๊ป ๋ด์ผ ํ๋ค.** ์ ์ฒด ์ด ์๊ฐ ๋๋ฉด ๋๋จธ์ง ํ๋ค์ด ์กฐ์ฉํ ์งง์์ง๋ค โ ํ๋ฉด์์๋ง ๋๋ฌ๋๋ ์ปดํฌ๋ํธ ๊ณ ์ ๋์์ด๋ผ ์๋์ผ๋ก ์ฑ์ ์ฃผ์ง ์๋๋ค.
|
|
1338
1810
|
|
|
1339
1811
|
```tsx
|
|
1340
1812
|
import {
|
|
@@ -1398,8 +1870,10 @@ export default function ProductCreatePage() {
|
|
|
1398
1870
|
|
|
1399
1871
|
- ์กฐํ ๊ฐ์ `type: 'text'` ํ์ผ๋ก ํ์ํ๋ค. **์ํยท๋ถ๋ฅ ํ๊ทธ๋ ๋ณ๋ ์์ญ์ด ์๋๋ผ ํ์ ํ ํ**์ผ๋ก ๋ฃ๋๋ค (`render` ์ `STag`).
|
|
1400
1872
|
- ํ์ด ๋ง์์ง๋ฉด **์ ํ๋ณ๋ก ์น์
์ ๋๋๊ณ , ๊ฐ ์น์
์ `SSectionHeaderCard` ๋ก ๊ฐ์ผ๋ค.**
|
|
1401
|
-
|
|
1873
|
+
์น์
์ ๋ชฉ์ `title` prop ์ผ๋ก, ๋ฐ๋ ์ฌ๋ฐฑ์ `padding` prop ์ผ๋ก ์ค๋ค.
|
|
1402
1874
|
- **์์ ยท์ญ์ ๋ฒํผ์ ํ๋จ์ ๋๋ค.** ๋ด์ฉ์ด ์งง์ ์ฐ์ธก ์๋จ์ ๋๋ ๋ณํ๋ ์์ผ๋ ๊ธฐ๋ณธ์ ํ๋จ์ด๋ค.
|
|
1875
|
+
- **์์ธ ํ์ด์ง๋ `contentHeight="fill"` ์ด ๊ธฐ๋ณธ์ด๋ค**(ยง2-2). ์น์
์ด ๋ง์ ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋๋ ํ๋ฉด์์๋ง `auto` + `scrollEndSpacing` ์ ์ผ ๋ค.
|
|
1876
|
+
- **์น์
๋ง๋ค ๋
๋ฆฝ ์ธ๋ผ์ธ ํผ์ด ์๋ ํํ**๋ ์์ธ ํ์ด์ง์ ๋ณํ์ด๋ค. ์น์
์์์ ๋ฐ๋ก ์์ ยท์ ์ฅํ๊ฒ ํ๋ ํ๋ฉด์ธ๋ฐ, ์ด๋ ๋ฒํผ ๊ฐ์กฐ๋ **์น์
๋จ์๊ฐ ์๋๋ผ ํ์ด์ง ๋จ์๋ก ํ๋จํ๋ค** โ ยง3-5-1 ์ "`secondary` ์ฐ์ ๋ฐฐ์น ๊ธ์ง"๋ ์น์
์ด ๋ค๋ฅด๋ฉด ์ ์ฉ๋์ง ์๋๋ค. ๊ทธ ์น์
์์์ ๋ซํ๋ ์ ์ฅยท์ทจ์๋ `SSectionHeaderCard` ์ `button`ยท`footerLeft` ๋ก ๋๊ธด๋ค (ยง3-7-8). ์๋ ์์ฒ๋ผ **ํ์ด์ง ์ ์ฒด๋ฅผ ํ์ ํ๋ ๋ฒํผ์ ์นด๋ ๋ฐ ํ๋จ ์ค**์ ๋๋ค โ ๋์ ์์ง ์๋๋ค.
|
|
1403
1877
|
|
|
1404
1878
|
```tsx
|
|
1405
1879
|
import {
|
|
@@ -1431,24 +1905,18 @@ export default function ProductDetailPage() {
|
|
|
1431
1905
|
// ๋ชฉ๋ก์์ ๋ค์ด์จ ์์ธ ํ์ด์ง โ onBack ์ผ๋ก ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ์ค๋ค
|
|
1432
1906
|
<AppShell header={{ fix: true, title: 'ํด๋์ ์
์ธ ', onBack: goList }}>
|
|
1433
1907
|
<div className="flex flex-col gap-sd-12">
|
|
1434
|
-
<SSectionHeaderCard>
|
|
1435
|
-
<
|
|
1436
|
-
<SSectionHeaderCard.Body>
|
|
1437
|
-
<SKeyValueTable fields={basicFields} values={product} />
|
|
1438
|
-
</SSectionHeaderCard.Body>
|
|
1908
|
+
<SSectionHeaderCard title="๊ธฐ๋ณธ ์ ๋ณด" marker thickness="accent">
|
|
1909
|
+
<SKeyValueTable fields={basicFields} values={product} />
|
|
1439
1910
|
</SSectionHeaderCard>
|
|
1440
1911
|
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
/>
|
|
1449
|
-
<SSectionHeaderCard.Body>
|
|
1450
|
-
<SKeyValueTable fields={priceFields} values={product} />
|
|
1451
|
-
</SSectionHeaderCard.Body>
|
|
1912
|
+
{/* ํค๋ ์ฐ์ธก์ ์ก์
์ด ํ์ํ๋ฉด slot ์ ์ด๋ค */}
|
|
1913
|
+
<SSectionHeaderCard
|
|
1914
|
+
title="๊ฐ๊ฒฉ ์ ๋ณด"
|
|
1915
|
+
marker
|
|
1916
|
+
helpText={['๋ถ๊ฐ์ธ ํฌํจ ๊ธ์ก์
๋๋ค.']}
|
|
1917
|
+
slot={<SButton size="sm" color="secondary" label="์ด๋ ฅ" onClick={openHistory} />}
|
|
1918
|
+
>
|
|
1919
|
+
<SKeyValueTable fields={priceFields} values={product} />
|
|
1452
1920
|
</SSectionHeaderCard>
|
|
1453
1921
|
|
|
1454
1922
|
{/* ์ก์
์ ํ๋จ โ ๋ชฉ๋ก(๋๋๋ฆฌ๊ธฐ)์ ์ผ์ชฝ ๋, ์คํ ์ก์
์ ์ค๋ฅธ์ชฝ ๋ */}
|
|
@@ -1482,6 +1950,29 @@ export default function ProductDetailPage() {
|
|
|
1482
1950
|
| Prop (Body) | ์ฉ๋ |
|
|
1483
1951
|
| --- | --- |
|
|
1484
1952
|
| `padding` | ์์ชฝ ์ฌ๋ฐฑ โ `'default'`(๊ธฐ๋ณธ) / `'wide'` / `'none'`. ํ์ ์ ยง2-2 "์น์
ยทํจ๋ ์์ชฝ ์ฌ๋ฐฑ". `p-sd-*` ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค |
|
|
1953
|
+
| `background` | ๋ณธ๋ฌธ ๋ฐํ โ `'frame'`(๊ธฐ๋ณธ) / `'neutral'`. ํ์ ์ ยง2-2 "๋ณธ๋ฌธ ๋ฐํ ๋๋ฌ์ํ๊ธฐ" |
|
|
1954
|
+
|
|
1955
|
+
| Prop (Footer) | ์ฉ๋ |
|
|
1956
|
+
| --- | --- |
|
|
1957
|
+
| `button` | ํ๋จ ์ก์
์์ญ ์ฐ์ธก ์ฃผ ์ก์
(ยง3-7-8) |
|
|
1958
|
+
| `footerLeft` | ํ๋จ ์ก์
์์ญ ์ข์ธก ์ฌ๋กฏ โ ๋ณด์กฐ ๋ฒํผ. `SButton` ์ `size="md"` ๋ฅผ ๋ช
์ํ๋ค |
|
|
1959
|
+
|
|
1960
|
+
๋ ์ค ํ๋๋ผ๋ ์ฃผ๋ฉด ํ๋จ ์ก์
์์ญ์ด ๋ ๋๋๋ค. ํ์ ๋ฐํ + ์๋จ ๊ตฌ๋ถ์ ์ด๋ฉฐ ์ข์ฐ ๋์ ํค๋์ ๋ง๋๋ค โ ๋ฐฐ๊ฒฝยท์ฌ๋ฐฑ์ ์ง์ ์ฃผ์ง ์๋๋ค.
|
|
1961
|
+
|
|
1962
|
+
**ํ ํ์ด์ง์ ์น์
์นด๋๊ฐ ๋ ์ด์์ด๋ฉด `marker` ๋ฅผ ์ผ ๋ค.** ์ ์ ์น์
์ ์๋ก ๊ตฌ๋ถํ ๋์์ด ์ฌ๋ฟ์ผ ๋๋ง ์๋ฏธ๊ฐ ์์ด, ์นด๋๊ฐ ํ๋๋ฟ์ธ ํ์ด์ง์์๋ ์ผ์ง ์๋๋ค. ํ ํ์ด์ง ์์์๋ ์ผ๊ฑฐ๋ ๋๊ฑฐ๋ ์ ๋ถ ๊ฐ๊ฒ ๊ฐ๋ค.
|
|
1963
|
+
|
|
1964
|
+
**์น์
๋ณธ๋ฌธ์ด ์๊ธฐ ์์์ ์คํฌ๋กคํด์ผ ํ๋ฉด ๋ฃจํธ `className` ์ผ๋ก ๋ง์ง๋ง ์์์ ์ธ๋ก ์ถ์ ์๋๋ค.**
|
|
1965
|
+
|
|
1966
|
+
```tsx
|
|
1967
|
+
<SSectionHeaderCard
|
|
1968
|
+
title="โฆ"
|
|
1969
|
+
className="[&>div:last-child]:min-h-0 [&>div:last-child]:flex-1"
|
|
1970
|
+
>
|
|
1971
|
+
<STable className="min-h-0 flex-1" โฆ />
|
|
1972
|
+
</SSectionHeaderCard>
|
|
1973
|
+
```
|
|
1974
|
+
|
|
1975
|
+
๋ณธ๋ฌธ ๋ํผ๋ `className` ์ ๋ฐ์ง ์์ผ๋ฏ๋ก(์ฌ๋ฐฑ์ `padding` prop ์ผ๋ก๋ง ๋ฐ๋๋ค) ๋ฃจํธ์์ ๋ด๋ ค ์ค๋ค. **ํ๋จ ์ก์
์์ญ์ด ์์ผ๋ฉด ๋ณธ๋ฌธ์ด ๋ ์ด์ ๋ง์ง๋ง ์์์ด ์๋๋ค** โ ๊ทธ๋๋ `[&>div:nth-last-child(2)]` ๋ก ๊ฒจ๋๋ค. ํํ ๊ตฌ์ฑ์ ์๋๋ค โ ๋๋ถ๋ถ์ `STable` ์ด ์๊ธฐ ์์์ ์คํฌ๋กคํ๋ฏ๋ก ์ฌ๊ธฐ๊น์ง ๊ฐ ์ผ์ด ์๋ค.
|
|
1485
1976
|
|
|
1486
1977
|
---
|
|
1487
1978
|
|
|
@@ -1497,8 +1988,11 @@ export default function ProductDetailPage() {
|
|
|
1497
1988
|
- [ ] ํ
์คํธ ํ์ ์๊ณ๋ฅผ ์์ฐจ ์ ์ฉํ๋๊ฐ (๊ธฐ๋ณธ โ `text-fg-secondary` โ `text-fg-tertiary`, ๋จ๊ณ ๊ฑด๋๋ฐ๊ธฐ โ)
|
|
1498
1989
|
- [ ] `SPage`ยท`SPopup` ์ ๊ธฐ๋ณธ ํจ๋ฉ์ `p-sd-*` ๋ก ๋ฎ์ด์ฐ์ง ์์๋๊ฐ, ๋ธ๋กยท์น์
**๊ฐ๊ฒฉ**์ด `gap-sd-12` ์ธ๊ฐ (`gap-sd-16`/`gap-sd-24` โ โ 24 ๋ ์์ชฝ ์ฌ๋ฐฑ์๋ง ์ด๋ฆฐ๋ค)
|
|
1499
1990
|
- [ ] ์น์
ยทํจ๋์ ์์ชฝ **์ฌ๋ฐฑ**์ด ยง2-2 ํ์ ๊ณผ ๋ง๋๊ฐ (๋ฉ์ด๋ฆฌ ๋ ์ข
๋ฅ โ 16 / ์ธ ์ข
๋ฅ ์ด์ โ 24, ์๋ฉด 16)
|
|
1500
|
-
- [ ] `SSectionHeaderCard
|
|
1501
|
-
- [ ]
|
|
1991
|
+
- [ ] `SSectionHeaderCard` ์ ์ฌ๋ฐฑ์ `p-sd-*` ๊ฐ ์๋๋ผ `padding` prop ์ผ๋ก ์คฌ๋๊ฐ
|
|
1992
|
+
- [ ] ํ์ด์ง์ `contentHeight="fill"` ์ ๋๊ฒผ๋๊ฐ (ยง2-2 ํ์ค โ ํ์ด์ง ์คํฌ๋กค์ ์ฐ๋ ํ๋ฉด์์๋ง `auto` + `scrollEndSpacing`)
|
|
1993
|
+
- [ ] `fill` ์ ์ด ๋ธ๋ก์์ **์์๊น์ง `min-h-0 flex-1` ์ด ๋๊ธฐ์ง ์์๋๊ฐ** (ํ ๊ตฐ๋ฐ๋ง ๋๊ฒจ๋ ์์์ด ๋์ด๋ฅผ ๋ชป ์ก๋๋ฐ ์คํจ๊ฐ ์กฐ์ฉํ๋ค)
|
|
1994
|
+
- [ ] ์์ฒด ์คํฌ๋กคํ๋ ํจ๋์ ํ๋จ์ `pb-[var(--cmp-pageBody-padding-scrollEnd)]` ์ด ์๋๊ฐ
|
|
1995
|
+
- [ ] ํ ํ์ด์ง์ ์น์
์นด๋๊ฐ ๋ ์ด์์ด๋ฉด `marker` ๋ฅผ ์ผฐ๋๊ฐ, ํ๋๋ฟ์ด๋ฉด ๊ป๋๊ฐ (ยง4-5)
|
|
1502
1996
|
- [ ] ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋์ดํ ๋ ยง2-2 ๊ทธ๋ฃน ๊ฐ๊ฒฉ์ ์ผ๋๊ฐ (์ฒดํฌ๋ฐ์ค ๊ฐ๋ก `gap-sd-24` ๋ฑ)
|
|
1503
1997
|
- [ ] ํ์ด์ง๊ฐ ยง4์ ํ์ค ๊ณจ๊ฒฉ์์ ์์ํ๋๊ฐ
|
|
1504
1998
|
- [ ] `header.fix` ๊ฐ ํ๋ก์ ํธ ์ ์ฒด์ ๊ฐ์ ๊ฐ์ธ๊ฐ (๋ค๋ฅธ ํ์ด์ง์ ๋ค๋ฅด๊ฒ ์์ด ์ฐ์ง ์์๋๊ฐ, ยง4-1)
|
|
@@ -1507,11 +2001,20 @@ export default function ProductDetailPage() {
|
|
|
1507
2001
|
- [ ] ํํฐยทํผยท์์ธ ์ ๋ณด๋ฅผ `SKeyValueTable` ๋ก ๋ง๋ค์๋๊ฐ (์ปจํธ๋กค์ `div` ๋ก ๋์ดํ์ง ์์๋๊ฐ). ํํฐ๋ฅผ `SChipFilter` ๋ก ํ๋ค๋ฉด ยง3-7-11 ์ ํ์ ์ ๊ฑฐ์ณค๋๊ฐ
|
|
1508
2002
|
- [ ] ์น์
๊ตฌ๋ถ์ `SSectionHeaderCard` ๋ฅผ ์ผ๋๊ฐ (์ง์ ๋ง๋ ์นด๋๊ฐ ์๋๋ผ)
|
|
1509
2003
|
- [ ] ๋ชฉ๋ก์ ์ฃผ์ ์ก์
์ด `STableBar` ์ `rightActions` ์ ์๋๊ฐ (ํ์ด์ง ์ ๋ชฉ ์ค์ด ์๋๋ผ)
|
|
2004
|
+
- [ ] ๋ชฉ๋ก ํ์ด์ง ํ์ `dense` ๋ก ๋ฐ๋ ํ ๊ธ์ ๋์ ๋๊ฐ, ๊ทธ ๊ฐ์ `onDenseChange` ๊ฒฐ๊ณผ๋ก ๋๋๋ ค ๋ฃ์ง๋ ์์๋๊ฐ (ยง4-2 โ ๋๋๋ ค ๋ฃ์ผ๋ฉด ๋๊ฒ ๋ณธ ์๊ฐ ํ ๊ธ์ด ์ฌ๋ผ์ง๋ค)
|
|
1510
2005
|
- [ ] ์ํ ํ์์ `STag size="sm"` ์ ์ผ๋๊ฐ
|
|
1511
2006
|
- [ ] ํ
์ด๋ธ์์ ์์ ๋ํ๋ด๋ ์ปฌ๋ผ(๊ธ์กยท์๋ยท๊ฐ์ ๋ฑ)์ด ์ ๋ถ `align: 'right'` ์ธ๊ฐ
|
|
1512
2007
|
- [ ] ๋ฒํธยท์ฝ๋ยท์ ํ๋ฒํธยท์ผ์ ์ปฌ๋ผ์ `align: 'center'` ๋ฅผ **๋ช
์**ํ๋๊ฐ (์๋ตํ๋ฉด ์ข์ธก์ด ๋๋ค)
|
|
1513
|
-
- [ ]
|
|
2008
|
+
- [ ] ๋ซํ ๊ฐ ์งํฉ(enumยท๋ง์คํฐ ๋ชฉ๋ก์์ ๊ณ ๋ฅด๋ ๊ฐ) ์ปฌ๋ผ์ `align: 'center'` ๋ฅผ ์คฌ๋๊ฐ โ ํ๊ทธ๋ก ๊ทธ๋ ธ๋ ๋งจ ํ
์คํธ๋ก ๊ทธ๋ ธ๋ ๊ฐ๋ค (ยง3-4)
|
|
2009
|
+
- [ ] **๋ชจ๋ ์ปฌ๋ผ์ ํญ์ ๋ช
์**ํ๋๊ฐ, px ๋ก๋ง ์คฌ๋๊ฐ (`%`ยท`clamp()` โ), `autoWidth` ๋ ์คํ์ด์ ์ด ํ๋๋ฟ์ธ๊ฐ (ยง3-4)
|
|
2010
|
+
- [ ] ์ปจํธ๋กค(`STag`ยท`SButton`ยท`SSelect`ยท`SInput` โฆ)์ด ๋ค์ด๊ฐ๋ ์ปฌ๋ผ์ด `resizable` ์ด๋ฉด `minWidth` ๋ ์คฌ๋๊ฐ (ยง3-4 โ ํญ์ด ๋ชจ์๋ผ๋ฉด ์์๊ฐ ์๋ ค ๋ชป ์ด๋ค)
|
|
2011
|
+
- [ ] ์ ๋ ฌ ๊ฐ๋ฅํ ์ด์ `sortable` ์ ์คฌ๋๊ฐ (`renderHeader` ๋ก ์ง์ ๋ง๋ค์ง ์์๋๊ฐ), ์ ๋ ฌ ์ํ๋ฅผ ํ์ด์ง๊ฐ ๋ค๊ณ ์๋๊ฐ (ยง3-4)
|
|
2012
|
+
- [ ] `editable` ยท `navigable` ํ์์ ์ผ ์ด์ด **์
์์๋ ์ค์ ๋ก ๊ทธ๋ ๊ฒ ๋์ํ๋๊ฐ** (์
๋ ฅ ์ปจํธ๋กค ยท ๋งํฌ๊ฐ ์๋๊ฐ), ํ์์ ๋ถ์ธ ์ด์ ํญ์ ํจ๊ป ๋ํ๋๊ฐ (ยง3-4)
|
|
1514
2013
|
- [ ] ๊ธ์กยท์๋ ๋ฑ ์์ ๋ํ๋ด๋ ์ซ์์ ๋น ์ง์์ด `toLocaleString()` ์ ์ผ๋๊ฐ (๋ฒํธยท์ฝ๋๋ ์ ์ธ)
|
|
2014
|
+
- [ ] ๋ ์ง๋ฅผ `YYYY-MM-DD` ๋ก ํ๊ธฐํ๋๊ฐ (`toLocaleDateString()` โ, ยง1-4)
|
|
2015
|
+
- [ ] ํ๋ ํญ์ ๋ฑ๊ธ(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`)์ผ๋ก ์คฌ๋๊ฐ โ px ์ง์ ์ง์ โ (ยง4-3)
|
|
2016
|
+
- [ ] ์กฐํ ์กฐ๊ฑด์ผ๋ก ์ฐ๋ ์
๋ ํธยท๋ ์งยท์๊ฐ ํผ์ปค์ `clearable` ์ ์คฌ๋๊ฐ, ๊ทธ ์ํ๊ฐ `null` ์ ๋ด์ ์ ์๋๊ฐ (ยง3-7-4 โ ํ์ ์
๋ ฅ ํ๋์๋ ์ผ์ง ์๋๋ค)
|
|
2017
|
+
- [ ] `SKeyValueTable` ์ ์งง์ ํ์ `tdColSpan` ์ ์ฃผ์ด ์ ์ฒด ์ด ์๋ฅผ ์ฑ์ ๋๊ฐ (ยง4-3 โ ์ ์ฑ์ฐ๋ฉด ๊ทธ ๊ตฌ๊ฐ์ ํ ๊ตฌ๋ถ์ ์ด ๋๊ธด๋ค)
|
|
1515
2018
|
- [ ] ํ๋จ ๋ฒํผ์ด ์๋ ๋ถ๋ฆฌ(`justify-between`)์ด๊ณ , ๋๋๋ฆฌ๊ธฐ๊ฐ ์ผ์ชฝ ๋ ยท ์คํ์ด ์ค๋ฅธ์ชฝ ๋์ธ๊ฐ
|
|
1516
2019
|
- [ ] ํ์ด์ง์ `color="primary"` ์ฑ์ ๋ฒํผ์ด **1๊ฐ๋ฟ**์ธ๊ฐ (`danger` ์ฑ์๋ 1๊ฐ, `SDropdownButton` ํฌํจ)
|
|
1517
2020
|
- [ ] ๋ฒํผ `size` ๊ฐ ์์น ๊ท์น๊ณผ ๋ง๋๊ฐ (ํ ๋ด๋ถ `xs` / ํ๋ฉด ์ก์
`sm` / ๋ชจ๋ฌ ํธํฐ `md`)
|
|
@@ -1520,7 +2023,7 @@ export default function ProductDetailPage() {
|
|
|
1520
2023
|
- [ ] `SGhostButton` ์ `intent` ๊ฐ ์กฐ์ ์ฑ๊ฒฉ๊ณผ ๋ง๋๊ฐ (๋๋๋ฆด ์ ์๋ ์ญ์ ๋ง `danger`, ์ง์
ยท์ถ๊ฐ๋ `action`, ๋๋จธ์ง๋ `default`)
|
|
1521
2024
|
- [ ] ์ฐฝ์ ๋์ธ ๋ ยง3-3-1 ํ๋ณ ์์๋ฅผ ๋ฐ๋๋๊ฐ (๊ทธ ์์ฒด๊ฐ ํ๋ฉด โ `SPopup` / ์คํ ์ฌ๋ถ๋ง ํ์ โ `SModal.confirm` / ๋ชจ๋ฌ ์์์ ์์ฑ โ `SActionModal`)
|
|
1522
2025
|
- [ ] ์์
์ฉ ๋ชจ๋ฌ์ `SActionModal` + `SModal.create` ๋ก ๋ง๋ค์๋๊ฐ (์ง์ ์ค๋ฒ๋ ์ด โ)
|
|
1523
|
-
- [ ] ๋ชจ๋ฌยท๋๋ก์ด์ ํ๋จ ๋ฒํผ์ ๋ณธ๋ฌธ์ด ์๋๋ผ `button` ยท `footerLeft` prop ์ผ๋ก ๋๊ฒผ๋๊ฐ (ยง3-3-4)
|
|
2026
|
+
- [ ] ๋ชจ๋ฌยท๋๋ก์ด์ ํ๋จ ๋ฒํผ์ ๋ณธ๋ฌธ์ด ์๋๋ผ `button` ยท `footerLeft` prop ์ผ๋ก ๋๊ฒผ๋๊ฐ (ยง3-3-4), ์นด๋ ์์์ ๋ซํ๋ ์ก์
๋ ๊ฐ์ prop ์ผ๋ก ๋๊ฒผ๋๊ฐ (ยง3-7-8)
|
|
1524
2027
|
- [ ] ์ฑ ๋ถํธ์คํธ๋ฉ์ Provider ์์ชฝ์ `<SModalOutlet />` ์ด ํ ๋ฒ ๋ ๋๋์ด ์๋๊ฐ (ยง4-1 โ ์์ผ๋ฉด ๋ชจ๋ฌ ์์์ ์ฑ ํ
์ด ์ฃฝ๋๋ค), ๊ทธ ๋์ ์ผ๋ก ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ฅผ Provider ๋ก ๋ค์ ๊ฐ์ธ์ง ์์๋๊ฐ
|
|
1525
2028
|
- [ ] ๊ณ ๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ยง2-0 ์ ์ ์ธต์ ๋์๋๊ฐ (์์๋ฅผ `SPage` ์ ์ง์ ๋์ง ์์๋๊ฐ, ๋ธ๋ก์ `div` ๋ก ๊ฐ์ธ์ง ์์๋๊ฐ)
|
|
1526
2029
|
- [ ] ยง2-0 ํฌํจ ๊ท์น์ ์ง์ผฐ๋๊ฐ (์นด๋ ์ ์นด๋ โ, ํ ์
์ ๋ธ๋ก โ)
|
|
@@ -1548,6 +2051,8 @@ export default function ProductDetailPage() {
|
|
|
1548
2051
|
| `sellmate/component-group-gap` | warn | ยง2-2 ์ปดํฌ๋ํธ ๊ทธ๋ฃน ๊ฐ๊ฒฉ (์ฒดํฌ๋ฐ์ค ๊ฐ๋ก 24 / ์ธ๋ก 8 ๋ฑ) |
|
|
1549
2052
|
| `sellmate/table-numeric-align` | warn | ยง3-4 ์ซ์ ์ปฌ๋ผ์ `align: 'right'` ๋๋ฝ (`--fix` ์ง์) |
|
|
1550
2053
|
| `sellmate/require-locale-number` | warn | ยง1-4 ๊ธ์กยท์๋ ๋ฑ ์๋ ์ปฌ๋ผ์ `toLocaleString()` ๋๋ฝ |
|
|
2054
|
+
| `sellmate/field-width-grade` | warn | ยง4-3 ํ๋ ํญ์ด `maxLength` ์ํ๊ณผ ๋ง๋ ๋ฑ๊ธ์ธ๊ฐ, px ๋ฅผ ์ง์ ์ ์ง ์์๋๊ฐ (px โ ๋ฑ๊ธ `--fix` ์ง์) |
|
|
2055
|
+
| `sellmate/table-column-width` | warn | ยง3-4 ์ปฌ๋ผ ํญ ๋ฏธ์ง์ (๊ธฐ๋ณธ 120px)ยทpx ์๋ ๊ฐ(`%`ยท`clamp()`)ยท`autoWidth` ์ค์ฉ |
|
|
1551
2056
|
| `sellmate/no-arbitrary-class` | off | ยง1-2 ํ ํฐ ์๋ ์์ฑ์ ์์ ๊ฐ (`text-[14px]`, `bg-[#eee]`) โ ํ์ด ์ผค ๋๋ง |
|
|
1552
2057
|
|
|
1553
2058
|
`configs.strict` ๋ฅผ ์ฐ๋ ํ๋ก์ ํธ๋ ์ ๋ถ error ์ด๊ณ ๊ฐ๊ฒฉ `sd-` ์ ๋๊น์ง ๊ฐ์ ๋๋ค.
|