sellmate-design-system-react 9.0.0-beta.4 โ 9.0.0-beta.41
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 +670 -95
- package/README.md +111 -9
- package/dist/components/SAccountListBox/AccountListBoxPortal.d.ts +31 -0
- package/dist/components/SAccountListBox/README.md +86 -0
- package/dist/components/SAccountListBox/SAccountListBox.d.ts +79 -0
- package/dist/components/SAccountListBox/SystemMenuPortal.d.ts +58 -0
- package/dist/components/SAccountListBox/accountListBox.config.d.ts +64 -0
- package/dist/components/SAccountListBox/index.d.ts +2 -0
- package/dist/components/SBadge/README.md +26 -0
- package/dist/components/SBadge/SBadge.d.ts +1 -1
- package/dist/components/SBarcodeInput/README.md +12 -4
- package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +10 -2
- package/dist/components/SButton/README.md +38 -0
- package/dist/components/SCalendar/README.md +13 -0
- package/dist/components/SCalendarBoard/CalendarDayCard.d.ts +38 -0
- package/dist/components/SCalendarBoard/CalendarDayEventListBox.d.ts +26 -0
- package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +13 -0
- package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +12 -0
- package/dist/components/SCalendarBoard/README.md +137 -0
- package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +68 -0
- package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +33 -0
- package/dist/components/SCalendarBoard/index.d.ts +3 -0
- package/dist/components/SCalendarBoard/types.d.ts +31 -0
- package/dist/components/SCallout/README.md +16 -1
- package/dist/components/SCallout/SCallout.d.ts +9 -4
- 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 +339 -14
- package/dist/components/SChipFilter/SChipFilter.d.ts +150 -60
- package/dist/components/SChipFilter/index.d.ts +1 -1
- package/dist/components/SChipInput/README.md +16 -2
- package/dist/components/SChipInput/SChipInput.d.ts +8 -2
- package/dist/components/SChipInput/index.d.ts +1 -1
- package/dist/components/SCircleProgress/README.md +8 -0
- package/dist/components/SConfirmModal/README.md +11 -3
- package/dist/components/SConfirmModal/SConfirmModal.d.ts +16 -8
- package/dist/components/SDatePicker/README.md +20 -2
- package/dist/components/SDatePicker/SDatePicker.d.ts +27 -4
- package/dist/components/SDateRangePicker/README.md +19 -4
- package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +19 -6
- package/dist/components/SDivider/README.md +7 -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 +29 -5
- package/dist/components/SField/SField.d.ts +20 -8
- package/dist/components/SFilePicker/README.md +18 -4
- package/dist/components/SFilePicker/SFilePicker.d.ts +11 -5
- package/dist/components/SFooter/README.md +25 -0
- package/dist/components/SFooter/SFooter.d.ts +4 -3
- package/dist/components/SForm/README.md +12 -1
- package/dist/components/SForm/SForm.d.ts +2 -2
- package/dist/components/SGhostButton/README.md +22 -4
- package/dist/components/SGnb/README.md +57 -6
- package/dist/components/SGnb/SGnb.d.ts +58 -8
- package/dist/components/SGnb/gnb.config.d.ts +12 -5
- package/dist/components/SGnb/index.d.ts +1 -1
- package/dist/components/SGnbSystem/README.md +186 -0
- package/dist/components/SGnbSystem/SGnbSystem.d.ts +179 -0
- package/dist/components/SGnbSystem/gnbSystem.config.d.ts +122 -0
- package/dist/components/SGnbSystem/index.d.ts +2 -0
- package/dist/components/SGuide/README.md +15 -0
- package/dist/components/SIcon/README.md +10 -0
- package/dist/components/SIcon/SIcon.d.ts +1 -1
- package/dist/components/SIcon/icons.gen.d.ts +4 -0
- package/dist/components/SImage/README.md +15 -1
- package/dist/components/SImage/SImage.d.ts +2 -2
- package/dist/components/SInput/README.md +6 -4
- package/dist/components/SInput/SInput.d.ts +10 -4
- package/dist/components/SKeyValueTable/README.md +86 -0
- package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +6 -2
- package/dist/components/SKeyValueTable/index.d.ts +1 -1
- package/dist/components/SLayout/README.md +22 -1
- package/dist/components/SLayout/SLayout.d.ts +6 -2
- 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 +15 -3
- package/dist/components/SList/SList.d.ts +7 -5
- package/dist/components/SList/index.d.ts +1 -1
- package/dist/components/SListItem/README.md +41 -0
- package/dist/components/SListItem/index.d.ts +1 -1
- package/dist/components/SLoadingContainer/loading.d.ts +18 -2
- package/dist/components/SLoadingModal/README.md +10 -2
- package/dist/components/SLoadingModal/SLoadingModal.d.ts +4 -4
- package/dist/components/SLoadingModal/index.d.ts +1 -1
- package/dist/components/SModal/README.md +1 -1
- package/dist/components/SNumberInput/README.md +14 -6
- package/dist/components/SNumberInput/SNumberInput.d.ts +12 -4
- package/dist/components/SPage/README.md +87 -5
- package/dist/components/SPage/SPage.d.ts +29 -9
- package/dist/components/SPage/SPageHeader.d.ts +31 -13
- package/dist/components/SPage/index.d.ts +2 -2
- package/dist/components/SPage/page-column.d.ts +34 -0
- package/dist/components/SPage/page-width.d.ts +23 -0
- package/dist/components/SPage/page.config.d.ts +18 -0
- package/dist/components/SPopover/README.md +15 -0
- package/dist/components/SPopup/README.md +27 -2
- package/dist/components/SPopup/SPopup.d.ts +7 -3
- package/dist/components/SPopup/index.d.ts +1 -1
- package/dist/components/SPortal/README.md +18 -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 +27 -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 +37 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +10 -0
- package/dist/components/SSelect/README.md +29 -11
- package/dist/components/SSelect/SSelect.d.ts +28 -8
- package/dist/components/SSplitter/README.md +17 -2
- package/dist/components/SSplitter/SSplitter.d.ts +7 -3
- package/dist/components/SStepper/README.md +26 -0
- package/dist/components/SSwitch/README.md +13 -1
- package/dist/components/SSwitch/SSwitch.d.ts +1 -3
- package/dist/components/SSystemActionButton/README.md +221 -0
- package/dist/components/SSystemActionButton/SSystemActionButton.d.ts +161 -0
- package/dist/components/SSystemActionButton/index.d.ts +2 -0
- package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +93 -0
- package/dist/components/STable/README.md +94 -10
- package/dist/components/STable/STable.d.ts +130 -22
- package/dist/components/STable/index.d.ts +1 -1
- package/dist/components/STabs/README.md +13 -2
- package/dist/components/STabs/STabs.d.ts +3 -5
- 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 +19 -1
- package/dist/components/STextLink/STextLink.d.ts +5 -1
- package/dist/components/STextarea/README.md +4 -4
- package/dist/components/STextarea/STextarea.d.ts +10 -4
- package/dist/components/STimePicker/README.md +16 -2
- package/dist/components/STimePicker/STimePicker.d.ts +11 -5
- package/dist/components/STimePicker/timepicker.config.d.ts +4 -2
- package/dist/components/STimeRangePicker/README.md +28 -2
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +11 -5
- package/dist/components/SToast/README.md +25 -1
- package/dist/components/SToast/SToast.d.ts +2 -2
- package/dist/components/SToggle/README.md +8 -0
- package/dist/components/SToggle/index.d.ts +1 -1
- package/dist/components/STooltip/README.md +25 -1
- package/dist/components/STooltip/STooltip.d.ts +1 -1
- package/dist/components/STree/README.md +44 -3
- package/dist/components/STree/STree.d.ts +24 -4
- package/dist/components/STree/index.d.ts +1 -1
- package/dist/docs/Gallery.d.ts +9 -0
- package/dist/docs/gallery-previews.d.ts +24 -0
- package/dist/index.cjs +10890 -5322
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.js +10852 -5322
- package/dist/index.js.map +1 -1
- package/dist/lib/doc-sections.d.ts +35 -0
- 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 +3396 -297
- package/dist/llms.txt +675 -97
- package/dist/playground/categories.d.ts +19 -0
- package/dist/styles.css +1731 -166
- package/dist/theme.css +216 -24
- 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 +13 -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
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` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
|
|
30
|
+
| **์
๋ ฅ (ํผ)** | `SForm` `SField` `SInput` `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
|
|
31
|
+
| **๋ ์งยท์๊ฐ** | `SCalendar` `SCalendarBoard`(ํ ๋ฌ์น ์ผ์ ํ) `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
|
|
32
32
|
| **ํยท๋ชฉ๋ก** | `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
|
|
33
|
-
| **๋ ์ด์์** | `SLayout` `SGnb` `SPage`(์ ๋ชฉ
|
|
33
|
+
| **๋ ์ด์์** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system ํจ๋์ ํ ์ค์ฉ ์๋ ์ก์
ํ โ ๋ฒํผ ๊ณ ๋ฅด๊ธฐ๋ ยง3-5) `SAccountListBox`(๊ณ์ ํ์ ๋๋ฌ ๋จ๋ ๊ณ์ ํจ๋) `SPage` `SPageHeader`(ํ์ด์ง ์ ๋ชฉ ์์ญ โ `SLayout` ์์์ `SPage` ์์ ๋๋ค) `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,12 +60,14 @@ 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` |
|
|
@@ -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,11 +150,11 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
136
150
|
|
|
137
151
|
| ์ธต | ๋ฌด์์ธ๊ฐ | ์ปดํฌ๋ํธ |
|
|
138
152
|
| --- | --- | --- |
|
|
139
|
-
| **์
ธ** | ์ฑ ์ ์ฒด ๋ผ๋. ํ์ด์ง๊ฐ ๋ฐ๋์ด๋ ๋จ๋๋ค | `SLayout` `SGnb` `SPage`(
|
|
140
|
-
| **๋ธ๋ก** | `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` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SImage` `SLinearProgress` `SCircleProgress` |
|
|
153
|
+
| **์
ธ** | ์ฑ ์ ์ฒด ๋ผ๋. ํ์ด์ง๊ฐ ๋ฐ๋์ด๋ ๋จ๋๋ค | `SLayout` `SGnb` `SGnbSystem`(GNB ๋งจ ์๋ ํ ยท ์ ํญ ์๋จ๋ฐ ์ค๋ฅธ์ชฝ ๋) `SPage` `SPageHeader`(`SLayout` ์์์ `SPage` ์์ ๋๋ค) |
|
|
154
|
+
| **๋ธ๋ก** | `SPage` ์ ์ง๊ณ ์์. ํ์ด์ง๋ฅผ ์ธ๋ก๋ก ์๋ ๋จ์ | `SSectionHeaderCard` `SCard` `SForm` `SSplitter` `SScrollArea` `SCalendarBoard` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
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
|
-
| **๋ ์ด์ด** | ๋ฌธ์ ํ๋ฆ **๋ฐ**์ ๋ ์ ๊ทธ๋ ค์ง๋ค. ์ด๋ ์ธต์์ ๋์ฐ๋ ๋ ์ด์์์ ์ํฅ์ด ์๋ค | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
|
|
157
|
+
| **๋ ์ด์ด** | ๋ฌธ์ ํ๋ฆ **๋ฐ**์ ๋ ์ ๊ทธ๋ ค์ง๋ค. ์ด๋ ์ธต์์ ๋์ฐ๋ ๋ ์ด์์์ ์ํฅ์ด ์๋ค | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SAccountListBox`(๊ณ์ ํ์ ๋ถ์ด ๋ฌ๋ค โ ์ง์ ๋์ฐ์ง ์๋๋ค) `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
|
|
144
158
|
|
|
145
159
|
์ฌ๊ธฐ์ ํ๋ฉด์ ์ฐจ์งํ์ง ์๋ **๋ถํธ์คํธ๋ฉ** ์ด ๋ฐ๋ก ์๋ค โ `SModalOutlet` `SToastContainer` ๋ ์ฑ ์ง์
์ ์ ํ ๋ฒ๋ง ๋ ๋ํ๋ค (ยง4-1).
|
|
146
160
|
|
|
@@ -186,7 +200,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
186
200
|
๋ธ๋ก ์์๋ ํ๋ฉด ์ข
๋ฅ์ ๋ฌด๊ดํ๊ฒ ๊ฐ๋ค. **ํ์ํ ๊ฒ๋ง ๋จ๊ธฐ๋ ์์๋ฅผ ๋ฐ๊พธ์ง ์๋๋ค.**
|
|
187
201
|
|
|
188
202
|
```text
|
|
189
|
-
1. ํ์ด์ง ์ ๋ชฉ `
|
|
203
|
+
1. ํ์ด์ง ์ ๋ชฉ `SPageHeader` (SGnb ์ SPage ์ฌ์ด. ๊ฐ์ด๋ยท๋งค๋ด์ผ ๋งํฌ๋ slot, ์ก์
๋ฒํผ์ ์ค์ง ์๋๋ค ยง4-2)
|
|
190
204
|
2. ์์ ์๋ด SCallout
|
|
191
205
|
3. ํํฐ SKeyValueTable ยท SChipFilter (ยง3-7-11)
|
|
192
206
|
4. ํด๋ฐ STableBar (๊ฑด์ ์์ฝ + ์ก์
)
|
|
@@ -214,7 +228,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
214
228
|
|
|
215
229
|
| ์ธต (ยง2-0) | ์ญํ | ํด๋์ค | ํฌ๊ธฐ |
|
|
216
230
|
| --- | --- | --- | --- |
|
|
217
|
-
| ์
ธ | ํ์ด์ง ์ ๋ชฉ (`
|
|
231
|
+
| ์
ธ | ํ์ด์ง ์ ๋ชฉ (`SPageHeader` ์ `title`) | `typo-heading-lg` | 18px |
|
|
218
232
|
| ๋ธ๋ก | ์น์
์ ๋ชฉ | `typo-heading-sm` | 14px |
|
|
219
233
|
| ๋ธ๋ก ๋ด๋ถ | ํ์ ์ ๋ชฉ (์น์
์์ ๋ ๋๋ ๋) | `typo-heading-xs` | 12px |
|
|
220
234
|
| โ | ๋ณธ๋ฌธ | `typo-body-sm-default` | 12px |
|
|
@@ -222,7 +236,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
222
236
|
|
|
223
237
|
ํ์ด์ง ์ ๋ชฉ๋ง 18px ๋ก ํฌ๊ฒ ๋๊ณ ๊ทธ ์๋๋ 14 / 12 ๋ก ์ด์ดํ๊ฒ ๊ฐ๋ค. ์ค๊ฐ ํฌ๊ธฐ(16px)๋ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์์ ์ฐ์ง ์๋๋ค.
|
|
224
238
|
|
|
225
|
-
- **ํ์ด์งยท์น์
์ ๋ชฉ์ ํ์ดํฌ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.** `
|
|
239
|
+
- **ํ์ด์งยท์น์
์ ๋ชฉ์ ํ์ดํฌ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.** `SPageHeader` ์ `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,6 +300,7 @@ 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
|
#### ์น์
ยทํจ๋ ์์ชฝ ์ฌ๋ฐฑ
|
|
@@ -368,6 +383,26 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
368
383
|
|
|
369
384
|
๋ฐํ์ ๊น ๊ฒฝ์ฐ, ํ ์ฌ์ด ๊ตฌ๋ถ์ (`SDivider`)์ ๋๊ฐ ๋ถํ์ํด์ง๋ค โ ์์ด ์ด๋ฏธ ๊ฒฝ๊ณ๋ฅผ ๋ง๋ ๋ค.
|
|
370
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
|
+
|
|
371
406
|
#### ์คํฌ๋กค ์์ญ์ ํ๋จ ์ฌ๋ฐฑ
|
|
372
407
|
|
|
373
408
|
์คํฌ๋กค์ ๋๊น์ง ๋ด๋ ธ์ ๋ ๋ง์ง๋ง ํญ๋ชฉ์ด ํ๋ฉด ๊ฒฝ๊ณ์ ๋ถ์ผ๋ฉด **๋ชฉ๋ก์ด ๋๋ ๊ฒ์ธ์ง ๋ ์๋ ๊ฒ์ธ์ง** ์ฝํ์ง ์๋๋ค. ๊ทธ๋์ ์คํฌ๋กค ์์ญ์ **ํ๋จ๋ง** ๋๊ฒ ๋๋ค. ๋๋จธ์ง ์ธ ๋ฐฉํฅ์ ์ 16 / 24 ๊ท์น ๊ทธ๋๋ก๋ค.
|
|
@@ -375,9 +410,9 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
375
410
|
| ์คํฌ๋กค ์ข
๋ฅ | ์ด๋ป๊ฒ |
|
|
376
411
|
| --- | --- |
|
|
377
412
|
| **ํจ๋ ์์ฒด ์คํฌ๋กค** (์ข์ธก ๋ชฉ๋ก, ์ค์ ๋ํ ๋ฑ) | ๊ทธ ํจ๋ ์์ชฝ ํ๋จ์ `pb-[var(--cmp-pageBody-padding-scrollEnd)]` โ `SPage` ์ ๊ฐ์ ํ ํฐ์ด๋ผ ๊ฐ์ด ๋ฐ๋์ด๋ ํจ๊ป ๋ฐ๋ผ๊ฐ๋ค |
|
|
378
|
-
| **ํ์ด์ง ๋จ์ ์คํฌ๋กค** | **`SPage`
|
|
413
|
+
| **ํ์ด์ง ๋จ์ ์คํฌ๋กค** | **`SPage` ์ `scrollEndSpacing` ์ผ๋ก ์ผ ๋ค. ์ง์ ํจ๋ฉ์ ์ฃผ์ง ์๋๋ค** |
|
|
379
414
|
|
|
380
|
-
`
|
|
415
|
+
**`scrollEndSpacing` ์ ๊ธฐ๋ณธ์ด ๊บผ์ ธ ์๋ค.** ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋ ๋๋ง ํ์ํ ๊ฐ์ด๋ผ, ์กฐ๊ฑด ์์ด ๋ถ์ด๋ฉด ๋ด์ฉ์ด ํ๋ฉด์ ๊ฑฐ์ ๋ฑ ๋ง๋ ํ์ด์ง๊น์ง ๊ทธ ์ฌ๋ฐฑ ๋๋ฌธ์ ์คํฌ๋กค๋๊ฒ ๋ง๋ ๋ค. ํ์ด์ง ์คํฌ๋กค์ ์ฐ๋ ํ๋ฉด(`contentHeight="auto"` + ๋ด์ฉ์ด ์ฐฝ๋ณด๋ค ๊น)์์๋ง ์ผ ๋ค. ํ์ด์ง๋ค์ด์
์ฒ๋ผ ๋์ ์๋ ค์ฃผ๋ ๊ฒ์ด ์ด๋ฏธ ์์ผ๋ฉด ์ผ์ง ์๋๋ค.
|
|
381
416
|
|
|
382
417
|
### 2-3. ์์
|
|
383
418
|
|
|
@@ -439,11 +474,15 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
439
474
|
| --- | --- | --- |
|
|
440
475
|
| ํ ์ค ํ
์คํธ๋ฅผ ๋ฐ๋๋ค | `SInput` | ยง3-7-1 |
|
|
441
476
|
| ์ฌ๋ฌ ์ค ํ
์คํธ๋ฅผ ๋ฐ๋๋ค | `STextarea` | ยง3-7-1 |
|
|
477
|
+
| ์ ๋ชฉยท๊ตต๊ฒยท๋ชฉ๋กยท์ ๊ฐ์ **์์์ด ๋จ์์ผ ํ๋** ๊ธ์ ๋ฐ๋๋ค | `SEditor` | ยง3-7-1 |
|
|
478
|
+
| ๋ชฉ๋กยท๊ฒฐ๊ณผ๋ฅผ ๊ฒ์์ด๋ก ์ขํ๋ค | `SSearchInput` | ยง3-7-1 |
|
|
442
479
|
| ์ซ์(์๋ยท๊ธ์ก)๋ฅผ ๋ฐ๋๋ค | `SNumberInput` | |
|
|
443
480
|
| ๋ฐ์ฝ๋๋ฅผ ์ค์บํด ๋ฐ๋๋ค | `SBarcodeInput` | |
|
|
444
481
|
| ๋ชฉ๋ก์์ ํ๋ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SSelect` | ยง3-7-2 |
|
|
445
482
|
| ์ ํ์ง๋ฅผ ํญ์ ํผ์ณ ๋๊ณ ํ๋ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SRadioGroup` | ยง3-7-2 |
|
|
446
483
|
| ๋ฒํผ ๋ชจ์์ผ๋ก ๋ชจ๋๋ฅผ ํ๋ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SRadioButton` | ยง3-7-2 |
|
|
484
|
+
| ์ ํ์ง๋ง๋ค ์ค๋ช
์ด ๋ถ์ด ํ ์ค๋ก๋ ์ ๋๋ค | `SRadioCardGroup` | ยง3-7-2 |
|
|
485
|
+
| ์ค๋ช
์ด ๋ถ์ ์ ํ์ง ์นด๋ ํ๋๋ฅผ ์ง์ ๋ฐฐ์นํ๋ค | `SRadioCard` | ยง3-7-2 |
|
|
447
486
|
| ๋ผ๋์ค ํ๋๋ฅผ ํ ์
๋ฑ์ ์ง์ ๋ฐฐ์นํ๋ค | `SRadio` | ยง3-7-2 |
|
|
448
487
|
| ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๋ค / ๋์๋ฅผ ๋ฐ๋๋ค | `SCheckbox` | ยง3-7-3 |
|
|
449
488
|
| ์ผ๋ ์ฆ์ ๋ฐ์๋๋ ์ค์ ์ ์ค๋ค | `SSwitch` | ยง3-7-3 |
|
|
@@ -473,6 +512,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
473
512
|
| ๋์ดํ ํญ๋ชฉ์ ํผ์ณ ํ์ ๋ด์ฉ์ ๋ณด์ฌ์ค๋ค | `SExpansionList` + `SExpansionItem` | ยง3-7-7 |
|
|
474
513
|
| ๋ถ๋ชจ-์์ ๊ณ์ธต์ ๋ค์ฌ์ฐ๊ธฐ๋ก ๋ณด์ฌ์ค๋ค | `STree` | ยง3-7-7 |
|
|
475
514
|
| ์ฌ์ฉ์๊ฐ ์์๋ฅผ ๋๋๊ทธ๋ก ๋ฐ๊พธ๊ฒ ํ๋ค | `SDraggableList` + `SDraggableItem` | ยง3-7-6 |
|
|
515
|
+
| ๋ ์ง๋ณ ์ผ์ ์ ํ ๋ฌ์น ๊ฒฉ์๋ก ํผ์ณ ๋ณด์ฌ์ค๋ค | `SCalendarBoard` | ยง3-7-4 |
|
|
476
516
|
| ํ ์์ ๊ฑด์ ์์ฝ๊ณผ ์ก์
์ ์น๋๋ค | `STableBar` | ยง4-2 |
|
|
477
517
|
| ์ํยท๋ถ๋ฅ๋ฅผ ๋ผ๋ฒจ๋ก ์ฐ๋๋ค | `STag` | ยง3-1 |
|
|
478
518
|
| ์ ์ ๋ง์ผ๋ก ์ํ๋ฅผ ์ฐ๋๋ค | `SBadge` | ยง3-1 |
|
|
@@ -487,6 +527,7 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
487
527
|
| ๋ผ๋ฒจ์ด ์๋ ์ผ๋ฐ ์ก์
์ ์ค๋ค | `SButton` | ยง3-5 |
|
|
488
528
|
| ์์ด์ฝ ํ๋๋ก ๋ป์ด ํตํ๋ ๋ถ๊ฐ ์กฐ์์ ์ค๋ค | `SGhostButton` | ยง3-5-5 |
|
|
489
529
|
| ํ ๋ฒํผ์ ์ฌ๋ฌ ์ ํ์ง๋ฅผ ๋งค๋จ๋ค | `SDropdownButton` | ยง3-5-4 |
|
|
530
|
+
| GNB system ํจ๋์์ ํ ์ค์ง๋ฆฌ ํ ์ก์
์ ์ค๋ค | `SSystemActionButton` | ยง3-5-7 |
|
|
490
531
|
|
|
491
532
|
#### D. ํ๋ฉด์ ๋ด๊ณ ๋๋๋ค
|
|
492
533
|
|
|
@@ -494,14 +535,19 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
494
535
|
| --- | --- | --- |
|
|
495
536
|
| ์ฑ ์
ธ(์๋จ๋ฐ + ๋ด๋น + ๋ณธ๋ฌธ)์ ์ธ์ด๋ค | `SLayout` | ยง4-1 |
|
|
496
537
|
| ์ข์ธก ๋ด๋น๊ฒ์ด์
์ ๋ง๋ ๋ค | `SGnb` | ยง4-1 |
|
|
538
|
+
| ์ข์ธก ๋ด๋น๊ฒ์ด์
๋งจ ์๋(๋๋ ์ ํญ ์๋จ๋ฐ ์ค๋ฅธ์ชฝ ๋)์ ์๋น์คยท๋๋ฉ์ธยท์๋ฆผยท์ค์ ยท๊ณ์ ๋ฌถ์์ ๋ถ์ธ๋ค | `SGnbSystem` | ยง4-1 |
|
|
539
|
+
| ์ฑ ์๋จ๋ฐ ์ค๋ฅธ์ชฝ ๋์ ์๋ฆผ ๋ฒจยท๊ณ์ ์ด๋ฆ์ ๋๋ค | `SGnbSystem` (`SGnb` ์ `system` ์ฌ๋กฏ โ ์ง์ ๋ง๋ค์ง ์๋๋ค) | ยง4-1 |
|
|
540
|
+
| ๊ณ์ ์ด๋ฆ์ ๋๋ฌ ์ด๋ฉ์ผยท๊ถํยท๊ณ์ ์ค์ ยท์ธ์ด ๋ณ๊ฒฝยท๋ก๊ทธ์์์ ๋์ด๋ค | `SAccountListBox` (`SGnbSystem` ์ `account.listBox` ๋ก ๋๊ธด๋ค โ ์ง์ ๋์ฐ์ง ์๋๋ค) | ยง4-1 |
|
|
497
541
|
| ํ์ด์ง ๋ณธ๋ฌธ์ ๋ด๋๋ค (ํจ๋ฉยท์คํฌ๋กค) | `SPage` | ยง4-1 |
|
|
498
|
-
| ํ์ด์ง ์ ๋ชฉ(+ ์๋ธ ํ
์คํธยท๋ค๋ก๊ฐ๊ธฐยท์ฐ์ธก ์ฌ๋กฏ)์ ๋ง๋ ๋ค | `
|
|
542
|
+
| ํ์ด์ง ์ ๋ชฉ(+ ์๋ธ ํ
์คํธยท๋ค๋ก๊ฐ๊ธฐยท์ฐ์ธก ์ฌ๋กฏ)์ ๋ง๋ ๋ค | `SPageHeader` (`SLayout` ์์์ `SPage` ์์ ๋๋ค) | ยง4-1 |
|
|
499
543
|
| ์ ๋ชฉ ์๋ ์น์
์ผ๋ก ๋ฌถ๋๋ค | `SSectionHeaderCard` | ยง3-7-8 |
|
|
500
544
|
| ์ ๋ชฉ ์์ด ํฐ ๋ฉด์ผ๋ก๋ง ๋ฌถ๋๋ค | `SCard` | ยง3-7-8 |
|
|
501
545
|
| ๊ฐ๋ก์ ์ผ๋ก ๋๋๋ค | `SDivider` | ยง3-6 |
|
|
502
546
|
| ์ฌ์ฉ์๊ฐ ์์ญ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ฒ ํ๋ค | `SSplitter` | ยง3-6 |
|
|
503
547
|
| ํน์ ์์ญ ์์์๋ง ์คํฌ๋กค์ํจ๋ค | `SScrollArea` | |
|
|
504
548
|
|
|
549
|
+
**`SScrollArea` ๋ก ํ์ด์ง ๋ณธ๋ฌธ ์ ์ฒด๋ฅผ ๊ฐ์ธ์ง ์๋๋ค.** ํ์ด์ง ์คํฌ๋กค์ `SPage` ์ `<main>` ๋ชซ์ด๋ค โ ๊ฐ์ธ๋ฉด ์คํฌ๋กค๋ฐ๊ฐ ๋ณธ๋ฌธ ํจ๋ฉ ์์ชฝ์ผ๋ก ๋ค์ด์ ํ์ด์ง ๊ฐ์ฅ์๋ฆฌ์์ ๋จ์ด์ ธ ๊ทธ๋ ค์ง๋ค (ยง2-2).
|
|
550
|
+
|
|
505
551
|
#### E. ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋์ํจ๋ค
|
|
506
552
|
|
|
507
553
|
| ํ๋ ค๋ ์ผ | ์ปดํฌ๋ํธ | ๊ฐ๋ฆผ |
|
|
@@ -569,6 +615,14 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
569
615
|
| ํน์ UI ์์์ ๋ํ **์จ๋ณด๋ฉยท๊ธฐ๋ฅ ์๋ด** | `SGuide` |
|
|
570
616
|
| ๋ก๋ฉ ์ค ํ๋ฉด ์ ๊ธ | `SLoadingModal` / ์์ญ ๋ก๋ฉ์ `SLoadingContainer` |
|
|
571
617
|
|
|
618
|
+
**`SCallout` ์ `type` ์ ๋์ด๋ ๋ฉด์ด ์ ํ๋ค.** ์๋ด์ ๊ฐ๋๊ฐ ์๋๋ผ ๋ฐฐ๊ฒฝ ๋๋น์ ๋ฌธ์ ๋ค.
|
|
619
|
+
|
|
620
|
+
| `type` | ์ธ์ |
|
|
621
|
+
| --- | --- |
|
|
622
|
+
| `default` | ํฐ ๋ฉด ์ (`SPage background="frame"`) โ ์
์ ํ์ ๋ฉด์ด๋ผ ํ์ด์ง์ ๊ตฌ๋ถ๋๋ค |
|
|
623
|
+
| `white` | ํ์ ๋ฉด ์ (`background="neutral"`ยท`"screen"`) โ ๊ทธ ์์์๋ `default` ๊ฐ ๋ฐฐ๊ฒฝ์ ๋ฌปํ๋ค |
|
|
624
|
+
| `danger` | ๊ฒฝ๊ณ . ์ข์ธก์ "์ฃผ์์ฌํญ" ํ์ดํ์ด ๋ถ์ผ๋ฏ๋ก ๋จ์ ์๋ด์๋ ์ฐ์ง ์๋๋ค |
|
|
625
|
+
|
|
572
626
|
### 3-3. ํ๋กํ
/์ค๋ฒ๋ ์ด๋ฅ
|
|
573
627
|
|
|
574
628
|
| ์ํฉ | ์ฌ์ฉ |
|
|
@@ -658,8 +712,8 @@ Tailwind ์ ํธ๋ฆฌํฐ๋ **ํ ํฐ ์ค์ผ์ผ์ ์๋ ๊ฐ๋ง** ์ฌ์ฉํ๋ค.
|
|
|
658
712
|
|
|
659
713
|
- ์์ ์ฐฝ์ด ์๋๋ผ **ํ๋ฉด ํ๋๊ฐ ํต์งธ๋ก** ๋ค์ด๊ฐ๋ค โ ๊ฒ์ ํํฐยทํ
์ด๋ธยทํ์ด์ง๋ค์ด์
์ด ๊ทธ๋๋ก ์๋ ๋ชฉ๋ก(`์์
ํ์ผ ๊ด๋ฆฌ`), ํค๋ ์นด๋ยทํญ์ด ์๋ ์์ธ(`์ด๋ ์ค๋ ์์ธ`).
|
|
660
714
|
- ์์ธ๋ฅผ ํ์
์ผ๋ก ์ฌ๋ ์ด์ ๋ **๋ชฉ๋ก์ ๋ ๋์ง ์๊ณ ์ฌ๋ฌ ๊ฑด์ ๋ฒ๊ฐ์ ๋ณด๊ธฐ** ์ํด์๋ค. ๋จ ์์ธ๊ฐ **ํญ์** ํ์
์ธ ๊ฒ์ ์๋๊ณ , ๋ฐ์ดํฐ ์์ด ๋ง์ ๋ ํ์
์ ์ด๋ค.
|
|
661
|
-
- ๊ตฌ์กฐ๋ ํค๋(์ ๋ชฉ ์ค์) + ๋ณธ๋ฌธ์ด๊ณ **ํธํฐ๋ ๊ธฐ๋ณธ์ผ๋ก ์๋ค**. ์กฐํ๋ง ํ๋ ํ์
์ ๊ทธ๋๋ก ๋๊ณ , **ํ์ ํ ์์
์ด ์์ ๋๋ง `
|
|
662
|
-
- **๋ณธ๋ฌธ ํจ๋ฉ์ `SPopup` ์ด ํ ํฐ์ผ๋ก ๋ฃ๋๋ค. ์ง์ ์ฃผ์ง ์๋๋ค** (`p-sd-*` ๋ก ๋ฎ์ด์ฐ๋ฉด ํ ํฐ์ด ๋ฐ๋์ด๋ ์ ๋ฐ๋ผ๊ฐ๋ค). ํ๋ฅผ ๊ฐ์ฅ์๋ฆฌ๊น์ง ์ฑ์ฐ๋ ๋ฑ ์ฝํ
์ธ ๊ฐ ์ฌ๋ฐฑ์ ์ง์ ๋ค๋ค์ผ ํ ๋๋ง `
|
|
715
|
+
- ๊ตฌ์กฐ๋ ํค๋(์ ๋ชฉ ์ค์) + ๋ณธ๋ฌธ์ด๊ณ **ํธํฐ๋ ๊ธฐ๋ณธ์ผ๋ก ์๋ค**. ์กฐํ๋ง ํ๋ ํ์
์ ๊ทธ๋๋ก ๋๊ณ , **ํ์ ํ ์์
์ด ์์ ๋๋ง `showFooter` ๋ก ํธํฐ๋ฅผ ์ผ์ `submitButton` ์ `์ ์ฅ`** ์ ๋๋ค.
|
|
716
|
+
- **๋ณธ๋ฌธ ํจ๋ฉ์ `SPopup` ์ด ํ ํฐ์ผ๋ก ๋ฃ๋๋ค. ์ง์ ์ฃผ์ง ์๋๋ค** (`p-sd-*` ๋ก ๋ฎ์ด์ฐ๋ฉด ํ ํฐ์ด ๋ฐ๋์ด๋ ์ ๋ฐ๋ผ๊ฐ๋ค). ํ๋ฅผ ๊ฐ์ฅ์๋ฆฌ๊น์ง ์ฑ์ฐ๋ ๋ฑ ์ฝํ
์ธ ๊ฐ ์ฌ๋ฐฑ์ ์ง์ ๋ค๋ค์ผ ํ ๋๋ง `padding="none"` ์ผ๋ก ๋๋ค.
|
|
663
717
|
- ๊ทธ ๋ฐ์๋ ํ์
์๋ ์ผ๋ฐ ํ์ด์ง์ ๊ฐ์ ๊ท์น(ยง4)์ ๋ฐ๋ฅธ๋ค: ๋ธ๋ก ๊ฐ๊ฒฉ `gap-sd-12`, ํ๋ `SKeyValueTable` / `STable`.
|
|
664
718
|
|
|
665
719
|
```tsx
|
|
@@ -742,36 +796,51 @@ SModal.create({ component: OrderModal, componentProps: { orderId } })
|
|
|
742
796
|
|
|
743
797
|
์์ฑ ์ค์ธ ๋ด์ฉ์ด ์์ ๋ ๋ซ๊ธฐ๋ฅผ ์๋ํ๋ฉด ์ดํ ์๋ด๋ฅผ ๋์ฐ๋ ๊ฒ์ **์๋น ์ฑ ๋ชซ**์ด๋ค. ๋์์ธ ์์คํ
์ dirty ์ํ๋ฅผ ์์ง ๋ชปํ๋ฏ๋ก ๋ฐฑ๋๋กญยทESC ๋ฅผ ์ผ๊ด ์ฐจ๋จํ ๋ฟ์ด๋ค. ์๋ด๊ฐ ํ์ํ๋ฉด ์ฑ์ด ์์ฒด dirty ํ์ ํ `SModal.confirm` ์ผ๋ก ๋์ด๋ค.
|
|
744
798
|
|
|
745
|
-
### 3-4. ํ
์ด๋ธ ์ปฌ๋ผ โ
|
|
799
|
+
### 3-4. ํ
์ด๋ธ ์ปฌ๋ผ โ ์ ๋ ฌยท๋๋นยทํค๋
|
|
746
800
|
|
|
747
|
-
####
|
|
801
|
+
#### ์ ๋ ฌ๊ณผ ๋๋น๋ ๊ฐ์ ํ์์ ์ ํ๋ค
|
|
748
802
|
|
|
749
|
-
|
|
750
|
-
์๋ฆฟ์๊ฐ ์ธ๋ก๋ก ๋ง์์ผ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ผ๋ก ๋น๊ตํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
803
|
+
์ปฌ๋ผ์ ์ ์ํ ๋ ์ ๋ ฌ๊ณผ ๋๋น๋ ๋ฐ๋ก ํ๋จํ๋ ๊ฒ์ด ์๋๋ค. ๋ ๋ค **๊ฐ์ ์ฑ๊ฒฉ**์์ ๋์จ๋ค.
|
|
751
804
|
|
|
752
|
-
|
|
805
|
+
์์น ํ ์ค: **๊ธธ์ด๋ฅผ ํ์์ด ์ ํ๋ฉด ๊ณ ์ , ์ฌ์ฉ์๊ฐ ์ ํ๋ฉด ๊ฐ๋ณ.**
|
|
753
806
|
|
|
754
|
-
| ๊ฐ ์ฑ๊ฒฉ | ์ ๋ ฌ | ์ |
|
|
755
|
-
| --- | --- | --- |
|
|
756
|
-
|
|
|
757
|
-
|
|
|
758
|
-
|
|
|
759
|
-
|
|
|
760
|
-
|
|
|
761
|
-
| ์ํ ํ๊ทธยท์์ด์ฝยท์ฒดํฌ๋ฐ์ค ๋ฑ ๊ณ ์ ํญ ์์ | `'center'` | `STag`, `SIcon` |
|
|
807
|
+
| ๊ฐ ์ฑ๊ฒฉ | ์ ๋ ฌ | ๋๋น | ์ |
|
|
808
|
+
| --- | --- | --- | --- |
|
|
809
|
+
| **๊ธ์กยท์๋ยท๊ฐ์ยท๋น์จ** (์์ ๋ํ๋ด๋ ๊ฐ) | **`'right'`** | ๊ณ ์ | `39,000์` ยท `12๊ฐ` ยท `3๊ฑด` ยท `15%` |
|
|
810
|
+
| ์ฝ๋ยท์๋ณ์, ์ ํ๋ฒํธ, ์ผ์ยท์ผ์ | **`'center'`** | ๊ณ ์ | `RV20250728-000010` ยท `010-1234-5678` ยท `2026-08-13` |
|
|
811
|
+
| **๋ซํ ๊ฐ ์งํฉ** (enum ยท ๋ง์คํฐ ๋ชฉ๋ก์์ ๊ณ ๋ฅด๋ ๊ฐ) | **`'center'`** | ๊ณ ์ | ์ํ ยท ์ง๊ธ ยท ๊ณต๊ฐ ๋ฒ์ ยท ๊ณ ์ฉ ํํ ยท ์์ผ |
|
|
812
|
+
| ์ํ ํ๊ทธยท์์ด์ฝยท๋ฒํผยท์ฒดํฌ๋ฐ์ค | `'center'` | ๊ณ ์ (`contentType: 'control'`) | `STag` ยท `SIcon` ยท `SGhostButton` |
|
|
813
|
+
| **ํ
์คํธ** (์ฌ์ฉ์๊ฐ ์์ ์
๋ ฅ) | ์๋ต(๊ธฐ๋ณธ `left`) | ๊ธฐ์ค ํญ + `resizable` | ์ด๋ฆ ยท ๋ชฉํ๋ช
ยท ์ด๋ฉ์ผ ยท ๋ฉ๋ชจ |
|
|
762
814
|
|
|
763
815
|
**์ค์ ์ ๋ ฌ์ `align: 'center'` ๋ฅผ ๋ช
์ํ๋ค.** ๊ธฐ๋ณธ๊ฐ์ด ์ข์ธก์ด๋ผ ์๋ตํ๋ฉด ์ค์์ด ๋์ง ์๋๋ค.
|
|
764
816
|
|
|
817
|
+
##### ํ๋ณ โ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋๊ฐ
|
|
818
|
+
|
|
819
|
+
์ฐ์ธก ์ ๋ ฌ์ ๊ทผ๊ฑฐ๋ "์๋ฆฟ์๋ฅผ ์ธ๋ก๋ก ๋ง์ถฐ ํฌ๊ธฐ๋ฅผ ์ฝ๋๋ค"๋ค. ์๋ฆฟ์ ์ฐจ์ด๊ฐ ๊ฑฐ์ ์๊ณ ๊ฐ๋ผ๋ฆฌ ๋์๋ฅผ ๊ฒฌ์ค ์ผ์ด ์์ผ๋ฉด ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ด๋ ์ฐ์ธก ์ ๋ ฌํ์ง ์๋๋ค โ ์ก์ฅ๋ฒํธ `123456789` ๋ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๊ฐ์ด ์๋๋ค.
|
|
820
|
+
|
|
821
|
+
##### ํ๋ณ โ ๊ฐ ์งํฉ์ด ๋ซํ ์๋๊ฐ
|
|
822
|
+
|
|
823
|
+
**๋ซํ ๊ฐ ์งํฉ์ด๋ฉด ํ๊ทธ๋ก ๊ทธ๋ฆฌ๋ ๋งจ ํ
์คํธ๋ก ๊ทธ๋ฆฌ๋ `center` ๋ค.** ํ๋ณ ์ง๋ฌธ ํ๋ โ *์ฌ์ฉ์๊ฐ ๊ทธ ์นธ์ ์ง์ ์น๋ ๊ฐ์ธ๊ฐ?* ์๋๋ฉด ๋ซํ ์งํฉ์ด๋ค.
|
|
824
|
+
|
|
825
|
+
| | ๊ฐ์ ์ถ์ฒ | ์ ๋ ฌ | ์ |
|
|
826
|
+
| --- | --- | --- | --- |
|
|
827
|
+
| **๋ซํ** | enum ยท ๋ง์คํฐ ๋ชฉ๋ก์์ ์ ํ (`SSelect` ์ `options` ์์ ์ค๋ ๊ฐ) | `center` | ์ง๊ธ ยท ์ํ ยท ๊ณต๊ฐ ๋ฒ์ ยท ์ต์ข
๋ฑ๊ธ ยท ๊ณ ์ฉ ํํ ยท ์์ผ |
|
|
828
|
+
| **์ด๋ฆผ** | ์ฌ์ฉ์๊ฐ ์์ ์
๋ ฅ (์์ ์
๋ ฅ ํ๋์์ ์ค๋ ๊ฐ) | `left` | ์ด๋ฆ ยท ๋ชฉํ๋ช
ยท ์ด๋ฉ์ผ ยท ๋ฌธํญ ๊ทธ๋ฃน๋ช
|
|
|
829
|
+
|
|
830
|
+
- **๋ฌด์์ผ๋ก ๊ทธ๋ ธ๋์ง๋ก ๊ฐ๋ฅด์ง ์๋๋ค.** ๊ฐ์ ์ฑ๊ฒฉ์ ๊ฐ์ด `STag` ๋ฉด `center`, ๋งจ ํ
์คํธ๋ฉด `left` ๊ฐ ๋๋ฉด ํ ํ
์ด๋ธ ์์์ ๊ธฐ์ค์ด ์ด๊ธ๋๋ค.
|
|
831
|
+
- **๊ธธ์ด๋ก๋ ๊ฐ๋ฅด์ง ์๋๋ค.** "์งง์ ๋ผ๋ฒจ์ด๋ฉด center" ๊ฐ์ ๋จ์๋ฅผ ๋ถ์ด๋ฉด `ํ๋ก๋ํธ๋์์ธํ`(8์)์ฒ๋ผ ๊ฒฝ๊ณ์ ๊ฑธ๋ฆฌ๋ ๊ฐ์์ ๋งค๋ฒ ํ๋จ์ด ๊ฐ๋ฆฐ๋ค.
|
|
832
|
+
- ํ ์ด์ ํ
์คํธ์ ํ๊ทธ๊ฐ ํจ๊ป ์ค๋ฉด ํ๊ทธ ๊ธฐ์ค(`center`)์ ๋ง์ถ๋ค.
|
|
833
|
+
|
|
765
834
|
```tsx
|
|
766
835
|
const columns: STableColumn[] = [
|
|
767
|
-
{ name: 'orderNo', label: '์ฃผ๋ฌธ๋ฒํธ', field: 'orderNo', width:
|
|
768
|
-
{ name: 'orderedAt', label: '์ฃผ๋ฌธ์ผ์', field: 'orderedAt', width:
|
|
769
|
-
{ name: 'name', label: '์ํ๋ช
', field: 'name' },
|
|
770
|
-
{ name: 'qty', label: '์๋', field: 'qty', width:
|
|
836
|
+
{ name: 'orderNo', label: '์ฃผ๋ฌธ๋ฒํธ', field: 'orderNo', width: 140, align: 'center' },
|
|
837
|
+
{ name: 'orderedAt', label: '์ฃผ๋ฌธ์ผ์', field: 'orderedAt', width: 100, align: 'center' },
|
|
838
|
+
{ name: 'name', label: '์ํ๋ช
', field: 'name', width: 240 }, // ์์ ์
๋ ฅ โ ์๋ต
|
|
839
|
+
{ name: 'qty', label: '์๋', field: 'qty', width: 80, align: 'right',
|
|
771
840
|
format: (v: number) => `${Number(v).toLocaleString()}๊ฐ` },
|
|
772
|
-
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width:
|
|
841
|
+
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width: 120, align: 'right',
|
|
773
842
|
format: (v: number) => `${Number(v).toLocaleString()}์` },
|
|
774
|
-
{ name: 'status', label: '์ํ', field: 'status', width:
|
|
843
|
+
{ name: 'status', label: '์ํ', field: 'status', width: 100, align: 'center',
|
|
775
844
|
render: () => <STag size="sm" color="green" label="ํ๋งค์ค" /> },
|
|
776
845
|
];
|
|
777
846
|
```
|
|
@@ -779,29 +848,56 @@ const columns: STableColumn[] = [
|
|
|
779
848
|
- `format` ์ผ๋ก ๋จ์๋ฅผ ๋ถ์ด๋๋ผ๋ **์์ ๋ํ๋ด๋ฉด ์ค๋ฅธ์ชฝ ์ ๋ ฌ**์ด๋ค. ๋จ์ ๋๋ฌธ์ ๋ฌธ์์ด์ด ๋๋ ๊ฒ์ ์ ๋ ฌ ํ๋จ๊ณผ ๋ฌด๊ดํ๋ค.
|
|
780
849
|
- ์์ ๋ํ๋ด๋ ์ซ์๋ ยง1-4 ๋๋ก **`toLocaleString()` ์ด ํ์**๋ค. ์ธ ์๋ฆฌ ์ฝค๋ง ์์ด ์ถ๋ ฅํ์ง ์๋๋ค.
|
|
781
850
|
- **๋ฒํธยท์ฝ๋์๋ ์ธ ์๋ฆฌ ์ฝค๋ง๋ฅผ ๋ฃ์ง ์๋๋ค.** ์ก์ฅ๋ฒํธ `123456789` ๋ฅผ `123,456,789` ๋ก ํ์ํ๋ฉด ๊ฐ ์์ฒด๊ฐ ๋ฌ๋ผ ๋ณด์ธ๋ค.
|
|
851
|
+
- ๋ ์ง๋ ยง1-4 ๋๋ก `YYYY-MM-DD` ๋ก ์ ๋๋ค. ์๋ฆฟ์๊ฐ ๊ณ ์ ์ด๋ผ ํญ์ ํ์์ผ๋ก ๊ณ์ฐํ ์ ์๋ค.
|
|
782
852
|
- **ํค๋๋ ๊ฐ์ด๋ฐ, ์
๋ง ์ฐ์ธก**์ผ๋ก ๋๋ ค๋ฉด `align` ์ด ์๋๋ผ `tdClass` ๋ฅผ ์ด๋ค. `align` ์ `<th>` ์ `<td>` ์ ํจ๊ป ์ ์ฉ๋๋ค.
|
|
783
853
|
|
|
784
854
|
```tsx
|
|
785
|
-
{ name: 'views', label: '์กฐํ์', field: 'views', align: 'center', tdClass: 'text-right!',
|
|
855
|
+
{ name: 'views', label: '์กฐํ์', field: 'views', align: 'center', width: 100, tdClass: 'text-right!',
|
|
786
856
|
format: (v: number) => Number(v).toLocaleString() },
|
|
787
857
|
```
|
|
788
858
|
|
|
789
859
|
- `SKeyValueTable` ์ ๊ฐ ์
๋ ๊ฐ์ ๊ธฐ์ค์ ๋ฐ๋ฅธ๋ค.
|
|
790
860
|
|
|
791
|
-
####
|
|
861
|
+
#### ๋๋น๋ px ๋ก๋ง ์ค๋ค
|
|
862
|
+
|
|
863
|
+
**์ปฌ๋ผ ํญ์ px ์ด๋ค.** ์ซ์๋ฅผ ์ฃผ๋ฉด px ๋ก ์ฝ๊ณ , ๋ฌธ์์ด์ `'120px'` ํํ๋ง ๋ฐ๋๋ค. `%` ยท `clamp()` ยท `min()` ์ ์ฐ์ง ์๋๋ค.
|
|
792
864
|
|
|
793
|
-
์ปฌ๋ผ ํญ์
|
|
865
|
+
์ปฌ๋ผ ํญ์ `<colgroup>` ์ `<col width>` ๋ก ๋ค์ด๊ฐ๊ณ ํ
์ด๋ธ์ด `table-fixed` ๋ผ, ํจ์ํ ๊ฐ์ ๊ณ์ฐ๋์ง ์๊ณ ํต์งธ๋ก ๋ฌด์๋ ๋ค auto ํญ์ผ๋ก ๋จ์ด์ง๋ค. `'30%'` ๋ ๋ ๋์๊ฒ `30`(px)์ผ๋ก ์ฝํ๋ค. **๋ ๋ค ์๋ฌ ์์ด ํ๋ฉด๋ง ํ์ด์ง๋ค.**
|
|
866
|
+
|
|
867
|
+
- **๋ด์ฉ์ด ๋ค์ด๊ฐ๋ ์ด์ ์ ๋ถ ํญ์ ๋ช
์ํ๋ค.** ์๋ตํ๋ฉด ๊ธฐ๋ณธ 120px ์ด ์กฐ์ฉํ ๋ค์ด๊ฐ๊ณ , "์งง์ ์ด์ด๋ผ ๊ทธ๋๋ก ๋ ๊ฒ"๊ณผ "ํ๋จ์ ๋น ๋จ๋ฆฐ ๊ฒ"์ด ๊ตฌ๋ถ๋์ง ์๋๋ค. 120px ์ด ๋ง๋๋ผ๋ `width: 120` ์ ์ ๋๋ค.
|
|
868
|
+
- **`autoWidth` ๋ ๋จ์ ํญ์ ํก์ํ๋ ์คํ์ด์ ์ด ํ๋์๋ง ์ด๋ค.** ๋ด์ฉ์ด ๋ค์ด๊ฐ๋ ์ด์๋ ์ฐ์ง ์๋๋ค โ ํญ์ด ๋ค๋ฅธ ์ด์ ์ข์ฐ๋ผ ํ๋ฉด๋ง๋ค ๋ฌ๋ผ์ง๋ค. ์คํ์ด์ ์ด์ ๊ฐ์ ๊ทธ๋ฆฌ์ง ์์ผ๋ฏ๋ก `field` ๋ ์๋ตํ๋ค.
|
|
869
|
+
|
|
870
|
+
```tsx
|
|
871
|
+
{ name: 'spacer', label: '', autoWidth: true },
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
- **`minWidth` ยท `maxWidth` ๋ `resizable` ์์ก์ด์ ์ด๋ ๋ฒ์์ผ ๋ฟ, ๋ ์ด์์์๋ ๊ด์ฌํ์ง ์๋๋ค.** ํญ์ ์ฃผ์ง ์์ ์ด์ด ์ด ๊ฐ ์์์ ์กํ๋ ๊ฒ์ด ์๋๋ค.
|
|
875
|
+
- **๊ณ ์ ํญ ํฉ์ด ์ต์ ์ฐฝ ํญ์ ๋์ผ๋ฉด ๊ฐ๋ก ์คํฌ๋กค์ด ๋๋ค.** `STable` ์ด ์๊ธฐ ์์์ ๊ฐ๋ก๋ก ์คํฌ๋กคํ๊ณ ํค๋ยท๋ฐ๋๊ฐ ํจ๊ป ์์ง์ด๋ฏ๋ก ๋ณ๋ ์กฐ์น๋ ํ์ ์๋ค โ ํญ์ ์ค์ฌ ๋ง์ถ์ง ๋ง๊ณ , ์ด์ด ์ ๋ง ๊ทธ๋งํผ ํ์ํ์ง๋ฅผ ๋ณธ๋ค.
|
|
876
|
+
|
|
877
|
+
##### ๊ณ ์ ํญ์ ์ด๋ป๊ฒ ์ ํ๋๊ฐ
|
|
878
|
+
|
|
879
|
+
```text
|
|
880
|
+
ํญ = ceil( ( max(๊ฐ ํญ + ๊ฐ ๊ธฐ์ค ํจ๋ฉ, ํค๋ ํญ + 32) + ์ฌ์ ) / 8 ) ร 8
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
- **๊ฐ๊ณผ ํค๋๋ฅผ ๋ฐ๋ก ๊ณ์ฐํด ํฐ ์ชฝ์ ์ด๋ค.** `contentType: 'control'` ์ `<td>` ์๋ง ์ ์ฉ๋๊ณ `<th>` ๋ ํญ์ ํ
์คํธ ํจ๋ฉ์ด๋ผ, ์งง์ ์ปจํธ๋กค + ๊ธด ํค๋ ์กฐํฉ์์ ํค๋๊ฐ ์๋ฆฐ๋ค.
|
|
884
|
+
- ๊ฐ์ ๋ฐ๋ผ ํญ์ด ๋ฌ๋ผ์ง๋ ์์(`STag` ๋ผ๋ฒจ, ๋ผ๋ฒจ ์๋ ๋ฒํผ)๋ **๊ฐ์ฅ ๊ธด ๊ฐ** ๊ธฐ์ค์ผ๋ก ์ก๋๋ค. `ํ๋งค์ค` ์ ๋ง์ถฐ๋๋ฉด `ํ๋งค์ค์ง ์์ฒญ` ์์ ์๋ฆฐ๋ค.
|
|
885
|
+
- **์ ๋ ฌ ๊ฐ๋ฅํ ํค๋(`sortable`)๋ ์์ด์ฝ ๋ฒํผ + ๊ฐ๊ฒฉ๋งํผ `+20px` ๋ ๋ ๋ค.** `helpText` ๋ฅผ ํจ๊ป ๋ฌ๋ฉด ๊ทธ๋งํผ ๋ ๋ํ๋ค.
|
|
886
|
+
- **`editable` ยท `navigable` ํ์๊ณผ `required` ํ์(`*`) ๋ ๊ฐ๊ฐ ํญ์ ๋จน๋๋ค.** ํค๋์ ๋ถ๋ ๊ฒ์ด ๋์๋ก **๋ผ๋ฒจ์ด ๋จผ์ ์๋ฆฌ๋ฏ๋ก**, ๋ถ์ธ ์ด์ ํญ์ ํจ๊ป ๋ํ๋ค.
|
|
887
|
+
- **๊ณ์ฐ๊ฐ์ ํฝ์
๋จ์๊น์ง ๋ง์ถ๋ฉด ์ด๊ธ๋๋ค** โ ์๋ธํฝ์
๋ฐ์ฌ๋ฆผ ๋๋ฌธ์ด๋ค. ์ฌ์ 8px ์ ์น๊ณ 8 ๋จ์๋ก ์ฌ๋ฆผํ๋ค.
|
|
888
|
+
- ์ข์ฐ ํจ๋ฉ์ `STable` ์ด ํ ํฐ์ผ๋ก ๋ฃ์ผ๋ฏ๋ก ์ง์ ์ฃผ์ง ์๋๋ค. ๊ทธ๋งํผ์ ๋บ ๋๋จธ์ง๊ฐ ์์ ๋ชซ์ด๋ผ๋ ์ ๋ง ๊ณ์ฐ์ ๋ฃ๋๋ค.
|
|
889
|
+
|
|
890
|
+
#### ์ปจํธ๋กค์ด ๋ค์ด๊ฐ๋ ์ปฌ๋ผ
|
|
891
|
+
|
|
892
|
+
`<td>` ๋ ํญ์ ๋๋ ๋ด์ฉ์ ์๋ผ๋ธ๋ค(`overflow: hidden`). ํ
์คํธ๋ผ๋ฉด ๋ง์ค์์ผ๋ก ๋๋์ง๋ง, ์
์ `STag` ยท `SButton` ยท `SGhostButton` ยท `SSelect` ยท `SInput` ยท `SNumberInput` ์ฒ๋ผ **์๊ธฐ ํญ์ ๊ฐ์ง ์์**๋ฅผ ๋ฃ์ผ๋ฉด ์์ ์์ฒด๊ฐ ์๋ ค **๋๋ฅด๊ฑฐ๋ ์ฝ๊ฑฐ๋ ์
๋ ฅํ ์ ์๊ฒ ๋๋ค.**
|
|
794
893
|
|
|
795
894
|
- **์ปจํธ๋กค์ด ๋ค์ด๊ฐ๋ ์ปฌ๋ผ์๋ `contentType: 'control'` ์ ํจ๊ป ์ค๋ค.** ์ข์ฐ ํจ๋ฉ์ด ํ
์คํธ์ฉ(๋๊ฒ)์์ ์ปจํธ๋กค์ฉ(์ข๊ฒ)์ผ๋ก ๋ฐ๋์ด, ๊ฐ์ ์ปฌ๋ผ ํญ์์๋ ์์๊ฐ ์ธ ํญ์ด ๋์ด์ง๋ค. ๊ธฐ๋ณธ๊ฐ์ `text` ๋ค.
|
|
796
|
-
- ๊ธฐ์ค์ **์์๊ฐ ์จ์ ํ ๋ณด์ด๋ ํญ + ์
์ข์ฐ ํจ๋ฉ**์ด๋ค. ์ข์ฐ ํจ๋ฉ์ `STable` ์ด ํ ํฐ์ผ๋ก ๋ฃ์ผ๋ฏ๋ก(์ง์ ์ฃผ์ง ์๋๋ค) ๊ทธ๋งํผ์ ๋บ ๋๋จธ์ง๊ฐ ์์ ๋ชซ์ด๋ผ๋ ์ ์ ๊ณ์ฐ์ ๋ฃ๋๋ค.
|
|
797
895
|
- ์์๊ฐ ๋ ์ด์์ด๋ฉด ์์ ํญ์ ํฉ์ **`gap` ๊น์ง** ๋ํ๋ค (ํ ๋ด๋ถ ์ธ๋ผ์ธ ์ก์
๊ฐ๊ฒฉ์ `gap-sd-4` ๊ณ ์ , ยง3-5-5).
|
|
798
|
-
- ๊ฐ์ ๋ฐ๋ผ ํญ์ด ๋ฌ๋ผ์ง๋ ์์(`STag` ๋ผ๋ฒจ, ๋ผ๋ฒจ ์๋ ๋ฒํผ)๋ **๊ฐ์ฅ ๊ธด ๊ฐ** ๊ธฐ์ค์ผ๋ก ์ก๋๋ค. `ํ๋งค์ค` ์ ๋ง์ถฐ๋๋ฉด `ํ๋งค์ค์ง ์์ฒญ` ์์ ์๋ฆฐ๋ค.
|
|
799
896
|
- `SSelect` ยท `SInput` ์ฒ๋ผ ์
ํญ์ ์ฑ์ฐ๋ ์ปจํธ๋กค์ **์ปฌ๋ผ ํญ์ด ๊ณง ์ปจํธ๋กค ํญ**์ด๋ค. ์ค์ ์ ํ๊ฐยท์
๋ ฅ๊ฐ์ด ๋ง์ค์ ์์ด ์ฝํ๋ ํญ์ธ์ง ํ์ธํ๋ค.
|
|
800
897
|
- ํญ์ ๋๋ํ ์ค ์ ์๋ ์๋ฆฌ๋ ํญ์ ์ค์ด๋ ๊ฒ ์๋๋ผ **์์๋ฅผ ๋ฐ๊พผ๋ค** โ ๋ผ๋ฒจ ๋ฒํผ ๋์ ์์ด์ฝ๋ง ์๋ `SGhostButton`, `size="xs"` (ยง3-5-2, ยง3-5-5).
|
|
801
|
-
- **`autoWidth` ๋ ํด๋ฒ์ด ์๋๋ค.** ๋ด์ฉ์ ๋ง์ถฐ ๋์ด๋๋ ๊ฒ ์๋๋ผ ๊ณ ์ ํญ ์ปฌ๋ผ๋ค์ด ๊ฐ์ ธ๊ฐ๊ณ **๋จ์ ํญ์ ๋๋ ๊ฐ๋ ๊ฒ**์ด๋ผ, ํ
์ด๋ธ์ด ์ข์ผ๋ฉด ์ญ์ ์๋ฆฐ๋ค. ์ปจํธ๋กค ์ปฌ๋ผ์ `width` ๋ก ์ง์ ํ๋ณดํ๋ค.
|
|
802
898
|
|
|
803
899
|
```tsx
|
|
804
|
-
{ name: 'normal', label: '์ ์', field: 'normal', width:
|
|
900
|
+
{ name: 'normal', label: '์ ์', field: 'normal', width: 96,
|
|
805
901
|
align: 'center', contentType: 'control', render: row => <SNumberInput โฆ /> },
|
|
806
902
|
```
|
|
807
903
|
|
|
@@ -812,13 +908,13 @@ const columns: STableColumn[] = [
|
|
|
812
908
|
```tsx
|
|
813
909
|
const columns: STableColumn[] = [
|
|
814
910
|
// ํ๊ทธ โ ๊ฐ์ฅ ๊ธด ๋ผ๋ฒจ ๊ธฐ์ค
|
|
815
|
-
{ name: 'status', label: '์ํ', field: 'status', width:
|
|
911
|
+
{ name: 'status', label: '์ํ', field: 'status', width: 120, minWidth: 120, align: 'center',
|
|
816
912
|
render: (row: SRow) => <STag size="sm" color="green" label={row.statusLabel} /> },
|
|
817
913
|
// ์
์ ์
๋ ฅ โ ์ปฌ๋ผ ํญ์ด ๊ณง ์
๋ ฅ ํญ
|
|
818
|
-
{ name: 'qty', label: '์๋', field: 'qty', width:
|
|
914
|
+
{ name: 'qty', label: '์๋', field: 'qty', width: 100, minWidth: 100, align: 'right',
|
|
819
915
|
render: (row: SRow) => <SNumberInput value={row.qty} onValueChange={v => setQty(row, v)} /> },
|
|
820
916
|
// ์ธ๋ผ์ธ ์ก์
๋ โ ํญ = xs ๋ฒํผ 2๊ฐ + gap-sd-4 + ์
์ข์ฐ ํจ๋ฉ
|
|
821
|
-
{ name: 'actions', label: '', field: 'id', width:
|
|
917
|
+
{ name: 'actions', label: '', field: 'id', width: 84, minWidth: 84, align: 'center',
|
|
822
918
|
render: (row: SRow) => (
|
|
823
919
|
<div className="flex items-center justify-center gap-sd-4">
|
|
824
920
|
<SGhostButton size="xs" intent="action" icon="edit" ariaLabel="์์ " onClick={() => editRow(row)} />
|
|
@@ -826,11 +922,34 @@ const columns: STableColumn[] = [
|
|
|
826
922
|
</div>
|
|
827
923
|
) },
|
|
828
924
|
|
|
829
|
-
// โ ์ปจํธ๋กค ์ปฌ๋ผ์ width ์๋ต โ ๊ธฐ๋ณธ
|
|
925
|
+
// โ ์ปจํธ๋กค ์ปฌ๋ผ์ width ์๋ต โ ๊ธฐ๋ณธ ํญ(120px)์ ๋งก๊ธฐ๋ฉด ๋ฒํผ์ด ์๋ฆฐ๋ค
|
|
830
926
|
{ name: 'move', label: '', field: 'id', render: () => <SButton label="์ฌ๊ณ ์ด๋" size="xs" /> },
|
|
831
927
|
];
|
|
832
928
|
```
|
|
833
929
|
|
|
930
|
+
#### ์ ๋ ฌ ๊ฐ๋ฅํ ์ปฌ๋ผ
|
|
931
|
+
|
|
932
|
+
**์ ๋ ฌ ์ํ๋ `STable` ์ด ๊ฐ์ง ์๋๋ค.** ์ปฌ๋ผ์ `sortable: true` ๋ฅผ ์ฃผ๊ณ , ํ์ด์ง๊ฐ `sort` ยท `onSortChange` ๋ก ์ํ๋ฅผ ๋ค๊ณ ์๋๋ค.
|
|
933
|
+
|
|
934
|
+
```tsx
|
|
935
|
+
const [sort, setSort] = useState<STableSort | null>({ name: 'orderedAt', dir: 'desc' });
|
|
936
|
+
|
|
937
|
+
<STable
|
|
938
|
+
columns={columns}
|
|
939
|
+
rows={rows}
|
|
940
|
+
sort={sort}
|
|
941
|
+
onSortChange={setSort}
|
|
942
|
+
/>
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
- **์ ๋ ฌ์ ์กฐํ ์กฐ๊ฑด์ด๋ค.** ์๋ฒ ์ ๋ ฌ์ด๋ฉด `?sort=createdAt&dir=desc` ๊ฐ ๊ณง ์์ฒญ์ด๊ณ , ๋ค๋ก๊ฐ๊ธฐยท์๋ก๊ณ ์นจยท๋งํฌ ๊ณต์ ๋ก ๋ณต์๋ผ์ผ ํ๋ค. ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ณธ์ ๋ค๋ฉด URL ๊ณผ ํ๋ฉด์ด ์ด๊ธ๋๋ค โ `SExpansionList` ์ ์ ํ์ ์ฑ์ด ๋๋ ๊ฒ๊ณผ ๊ฐ์ ์ด์ ๋ค (ยง3-7-7).
|
|
946
|
+
- **ํ์ ์ค์ ๋ก ์ ๋ ฌํ๋ ๊ฒ๋ ํ์ด์ง ๋ชซ์ด๋ค.** `STable` ์ ๋ฐ์ ์์๋๋ก ๊ทธ๋ฆฐ๋ค.
|
|
947
|
+
- **๋์** โ ํค๋ ํด๋ฆญ ์ `asc โ desc โ ํด์ ` 3๋จ. ๋ค๋ฅธ ์ด์ ๋๋ฅด๋ฉด ๊ทธ ์ด์ `asc` ๋ก ์์ํ๋ค. ํด์ ๋๋ฉด `onSortChange(null)`.
|
|
948
|
+
- **์์ด์ฝ** โ ๋ฏธ์ ๋ ฌ `updown`, ์ค๋ฆ `arrowUp`, ๋ด๋ฆผ `arrowDown`. ์ ๋ ฌ ์ค์ธ ์ด๋ง `action` ์์ผ๋ก ์ฌ๋ผ์จ๋ค. `SGhostButton size="xxs"` ๋ก ๊ทธ๋ ค์ง๋ฏ๋ก ์ง์ ๋ง๋ค์ง ์๋๋ค.
|
|
949
|
+
- **ํด๋ฆญ ์์ญ์ ์ ๋ ฌ ๋ฒํผ๋ฟ์ด๋ค.** ํค๋ ์
์ ์ฒด๋ฅผ ๋๋ฅด๊ฒ ํ์ง ์๋๋ค โ ๋ผ๋ฒจ์ ๋๋๊ทธํด ๊ณ ๋ฅด๊ฑฐ๋ `helpText` ์์ด์ฝ์ hover ํ๋ ๊ฒ๊ณผ ๋ค์์ธ๋ค.
|
|
950
|
+
- **๋ค์ค ์ ๋ ฌ์ ์ง์ํ์ง ์๋๋ค.** ํ ๋ฒ์ ํ ์ด์ด๋ค.
|
|
951
|
+
- `renderHeader` ๋ก ํค๋๋ฅผ ํต์งธ๋ก ๊ต์ฒดํ๋ฉด ์ ๋ ฌ ์์ด์ฝ๋ ํด๋ฆญ๋ ๊ทธ๋ฆฌ์ง ์๋๋ค โ ํค๋ ์ ์ฒด๊ฐ ์๋น ์ฑ ์ฑ
์์ด ๋๋ค.
|
|
952
|
+
|
|
834
953
|
#### ๊ฐ์ด ์๋ ์
์ ํ์ ํ์ดํ
|
|
835
954
|
|
|
836
955
|
์
์ **๋น์นธ์ผ๋ก ๋์ง ์๋๋ค.** ๊ฐ์ด `null` ยท `undefined` ยท ๋น ๋ฌธ์์ด์ด๋ฉด `-` ๋ฅผ `text-fg-tertiary`(`grey_65`)๋ก ํ์ํ๋ค.
|
|
@@ -842,9 +961,9 @@ const emptyCell = <span className="text-fg-tertiary">-</span>;
|
|
|
842
961
|
const hasValue = (v: unknown) => v !== null && v !== undefined && v !== '';
|
|
843
962
|
|
|
844
963
|
const columns: STableColumn[] = [
|
|
845
|
-
{ name: 'memo', label: '๋ฉ๋ชจ', field: 'memo',
|
|
964
|
+
{ name: 'memo', label: '๋ฉ๋ชจ', field: 'memo', width: 240,
|
|
846
965
|
render: (row: SRow) => (hasValue(row.memo) ? row.memo : emptyCell) },
|
|
847
|
-
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width:
|
|
966
|
+
{ name: 'price', label: 'ํ๋งค๊ฐ', field: 'price', width: 120, align: 'right',
|
|
848
967
|
render: (row: SRow) =>
|
|
849
968
|
hasValue(row.price) ? `${Number(row.price).toLocaleString()}์` : emptyCell },
|
|
850
969
|
];
|
|
@@ -852,6 +971,54 @@ const columns: STableColumn[] = [
|
|
|
852
971
|
|
|
853
972
|
`0` ์ ๊ฐ์ด ์๋ ๊ฒ์ด๋ฏ๋ก ํ์ดํ์ผ๋ก ๋ฐ๊พธ์ง ์๋๋ค โ `0์` ๊ทธ๋๋ก ํ์ํ๋ค.
|
|
854
973
|
|
|
974
|
+
#### ๋ผ๋ฒจ๋ง์ผ๋ก ๋ป์ด ์ ํตํ๋ ์ปฌ๋ผ์ `helpText`
|
|
975
|
+
|
|
976
|
+
ํค๋ ๋ผ๋ฒจ์ ์ปฌ๋ผ ํญ ์์ ๋ค์ด๊ฐ์ผ ํด์ ์งง์์ง๋ค. **์ฐ์ถ ๊ธฐ์คยท๋จ์ยท์ํ ๊ฐ์ ๋ป์ฒ๋ผ ๋ผ๋ฒจ์ ๋ด๊ธฐ์ง ์๋ ์ค๋ช
์ `column.helpText` ๋ก ์ค๋ค** โ ๋ผ๋ฒจ ๋ค์ ๋์๋ง ์์ด์ฝ์ด ๋ถ๊ณ hover ํ๋ฉด ํดํ์ด ๋ฌ๋ค. ๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ์ด ํ ์ค์ด๋ค. `SKeyValueTable` ์ `field.helpText`, `SSectionHeaderCard` ์ `helpText` ์ ๊ฐ์ ๊ฒ์ด๋ค.
|
|
977
|
+
|
|
978
|
+
ํ๋จ ๊ธฐ์ค ํ ์ค: *์ปฌ๋ผ ์ ๋ชฉ์ด ์ค์๋งยท์ฌ๋ด ์ฉ์ดยท๊ณ์ฐ์์ด๊ฑฐ๋, ๊ฐ์ด ์๋๋ผ ์ด ์์ฒด์ ์ค๋ช
์ด ํ์ํ ๋ ํค๋์ ๋จ๋ค.*
|
|
979
|
+
|
|
980
|
+
```tsx
|
|
981
|
+
const columns: STableColumn[] = [
|
|
982
|
+
{ name: 'orderCount', label: '์ฃผ๋ฌธ ์', field: 'orderCount', width: 120, align: 'right',
|
|
983
|
+
helpText: ['์ทจ์ยท๋ฐํ์ ์ ์ธํ ํ์ ์ฃผ๋ฌธ ์์
๋๋ค.'],
|
|
984
|
+
format: (v: number) => `${Number(v).toLocaleString()}๊ฑด` },
|
|
985
|
+
{ name: 'status', label: '์ํ', field: 'status', width: 100, align: 'center',
|
|
986
|
+
helpText: ['ํ์ฑ: ์ต๊ทผ 30์ผ ๋ด ์ฃผ๋ฌธ ์์', '๋ณด๊ด๋จ: ๊ฑฐ๋ ์ข
๋ฃ'] },
|
|
987
|
+
];
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
- **`renderHeader` ๋ก ํค๋๋ฅผ ์ง์ ๋ง๋ค์ด `STooltip` ์ ๋ถ์ด์ง ์๋๋ค.** `renderHeader` ๋ ํค๋ ์ ์ฒด๋ฅผ ๊ต์ฒดํ๋ฏ๋ก `helpText` ๊ฐ ๋ฌด์๋๊ณ , ์์ด์ฝยทํฌ๊ธฐยท์ยท๊ฐ๊ฒฉ์ ์์ผ๋ก ๋ง์ถ๊ฒ ๋๋ค.
|
|
991
|
+
- **๋ชจ๋ ์ปฌ๋ผ์ ๋ฌ์ง ์๋๋ค.** ๋ผ๋ฒจ๋ก ๋ป์ด ํตํ๋ ์ปฌ๋ผ(`์ฃผ๋ฌธ๋ฒํธ`ยท`์ํ๋ช
`)๊น์ง ๋ถ์ด๋ฉด ํค๋๊ฐ ์์ด์ฝ์ผ๋ก ๋ค๋ฎ์ฌ ์ ์ ์ค๋ช
์ด ํ์ํ ์ปฌ๋ผ์ด ๋ฌปํ๋ค.
|
|
992
|
+
- ๊ธด ๋ฌธ์ฅ์ ๋ฃ๋ ์๋ฆฌ๊ฐ ์๋๋ค. ํ ์ค์ ํ ๊ฐ์ง ์ฌ์ค๋ง ๋ด๊ณ , ๊ทธ ์ด์์ ํ์ด์ง ์๋จ ์๋ด(`SCallout`)๋ก ๋บ๋ค.
|
|
993
|
+
- ์์ด์ฝ๋ ํญ์ ๋จน๋๋ค โ ํค๋ ํญ ๊ณ์ฐ์ ๋ฃ๋๋ค.
|
|
994
|
+
|
|
995
|
+
#### ํค๋์ ๋ถ๋ ๊ฒ๋ค์ ์์ ยท ์ด์ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง ์๋ฆฌ๋ ํ์
|
|
996
|
+
|
|
997
|
+
ํค๋ ๋ผ๋ฒจ ๋ค์ ๋ถ๋ ๊ฒ์ ๋ค ๊ฐ์ง๊ณ , **์์๋ `STable` ์ด ๊ณ ์ ํ๋ค.** ์๋น ์ฑ์ด ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ค.
|
|
998
|
+
|
|
999
|
+
```text
|
|
1000
|
+
๋ผ๋ฒจ [helpText ?] [editable] [navigable] [required *] [sortable ์ ๋ ฌ๋ฒํผ]
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
**`editable` ์ ๊ฐ์ ์ง์ ๊ณ ์น ์ ์๋ ์ด, `navigable` ์ ๋๋ฌ์ ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๋ ์ด์ ์ค๋ค.** ๋ ๋ค **ํ์์ผ ๋ฟ ๋ฒํผ์ด ์๋๋ค** โ ์์ด์ฝยทํฌ๊ธฐยท์์ ์ปดํฌ๋ํธ๊ฐ ๊ณ ์ ํ๊ณ ํด๋ฆญ์ ๋ฐ์ง ์๋๋ค.
|
|
1004
|
+
|
|
1005
|
+
```tsx
|
|
1006
|
+
const columns: STableColumn[] = [
|
|
1007
|
+
{ name: 'name', label: '์ํ๋ช
', field: 'name', width: 200,
|
|
1008
|
+
navigable: true,
|
|
1009
|
+
render: (row: SRow) => <STextLink label={row.name} onClick={() => goDetail(row.id)} /> },
|
|
1010
|
+
{ name: 'stock', label: '์ฌ๊ณ ', field: 'stock', width: 160, contentType: 'control',
|
|
1011
|
+
editable: true, required: true,
|
|
1012
|
+
render: (row: SRow) => <SNumberInput value={row.stock} width="100%" /> },
|
|
1013
|
+
];
|
|
1014
|
+
```
|
|
1015
|
+
|
|
1016
|
+
- **์ค์ ๋ก ๊ทธ๋ ๊ฒ ๋์ํ๋ ์ด์๋ง ์ผ ๋ค.** ํ์๋ง ์ผ๊ณ ์
์ ํ
์คํธ ๊ทธ๋๋ก ๋๋ฉด, ๊ณ ์น ์ ์๋ค๊ณ ํด ๋๊ณ ๊ณ ์น ๋ฐฉ๋ฒ์ด ์๊ณ ๋์ด๊ฐ ์ ์๋ค๊ณ ํด ๋๊ณ ๋๋ฅผ ๊ฒ์ด ์๋ค. `editable` ์ด๋ฉด ์
์ ์
๋ ฅ ์ปจํธ๋กค์ด, `navigable` ์ด๋ฉด ์
์ ๋งํฌยทํด๋ฆญ์ด ์์ด์ผ ํ๋ค.
|
|
1017
|
+
- **ํ์์ผ๋ก ๋์์ ๋์ ํ์ง ์๋๋ค.** ๊ณ ์น๋ UI ๋ ๋์ด๊ฐ๋ ๋์๋ ์
(`column.render`) ๋ชซ์ด๋ค.
|
|
1018
|
+
- **`renderHeader` ๋ก ํค๋๋ฅผ ํต์งธ๋ก ๊ต์ฒดํ๋ฉด ํ์๋ `required` ๋ ๊ทธ๋ ค์ง์ง ์๋๋ค** โ ํค๋ ์ ์ฒด๊ฐ ์๋น ์ฑ ์ฑ
์์ด ๋๋ฏ๋ก ์์ยทํฌ๊ธฐยท์์ ์์ผ๋ก ๋ง์ถ๊ฒ ๋๋ค.
|
|
1019
|
+
|
|
1020
|
+
**๊ฐ์ ๋ฐ๋์ ์ฑ์์ผ ํ๋ ์ด์๋ `column.required`** ๋ฅผ ์ค๋ค โ ๋ผ๋ฒจ ๋ค์ `*` ๊ฐ ๋ถ๋๋ค. `SKeyValueTable` ์ `field.required` ์ ๊ฐ์ ๊ฒ์ด๋ค. **์ฝ๊ธฐ ์ ์ฉ ์ด์ ๋ถ์ด์ง ์๋๋ค** โ ํ์๋ง ์๊ณ ์ฑ์ธ ๋ฐฉ๋ฒ์ด ์์ด ์ฌ์ฉ์๊ฐ ๋งํ๋ค.
|
|
1021
|
+
|
|
855
1022
|
### 3-5. ๋ฒํผ๋ฅ
|
|
856
1023
|
|
|
857
1024
|
| ์ํฉ | ์ฌ์ฉ |
|
|
@@ -861,6 +1028,7 @@ const columns: STableColumn[] = [
|
|
|
861
1028
|
| **์์ด์ฝ ํ๋๋ก ๋ป์ด ํตํ๋ ๋ถ๊ฐ ์กฐ์** | **`SGhostButton`** โ ๋ผ๋ฒจ์ด ์๋ ์์ด์ฝ ์ ์ฉ ๋ฒํผ (์๋ 3-5-5) |
|
|
862
1029
|
| ๋ณธ๋ฌธ ์ ์ด๋ ๋งํฌ | `STextLink` |
|
|
863
1030
|
| ๋ฉ์ธ ์ก์
+ ๋ถ๊ฐ ๋ฉ๋ด | `SDropdownButton` |
|
|
1031
|
+
| **GNB system ํจ๋์ ํ ์ค ์ก์
** | **`SSystemActionButton`** โ ํ ์ ์ฒด๊ฐ ๋ฒํผ์ธ ํ๋ฉดํ (์๋ 3-5-7) |
|
|
864
1032
|
|
|
865
1033
|
#### 3-5-1. ์ฑ์ ๋ฒํผ์ ํ์ด์ง๋น ๊ฐ์ ์ ํ์ด ์๋ค
|
|
866
1034
|
|
|
@@ -875,6 +1043,19 @@ const columns: STableColumn[] = [
|
|
|
875
1043
|
|
|
876
1044
|
`SDropdownButton` ๋ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅด๋ฉฐ, **ํ์ด์ง๋น `primary` ์ฑ์ 1๊ฐ ๊ณ์ฐ์ ํฌํจ**๋๋ค.
|
|
877
1045
|
|
|
1046
|
+
##### ๋ฌด์์ด ์ด๋ ์๊ณ์ธ๊ฐ
|
|
1047
|
+
|
|
1048
|
+
๊ฐ์๋ง์ผ๋ก๋ ํ๋ณด๊ฐ ์ฌ๋ฟ์ผ ๋ ์ด๋ ๊ฒ์ ์ฌ๋ฆด์ง ๊ฐ๋ฆฌ์ง ์๋๋ค. ๊ธฐ์ค์ **๊ทธ ์กฐ์์ด ๋ฌด์์ ๋ฏธ์น๋๊ฐ**๋ค.
|
|
1049
|
+
|
|
1050
|
+
| ์๊ณ | ๋ฌด์์ ์ฐ๋ |
|
|
1051
|
+
| --- | --- |
|
|
1052
|
+
| `primary` ์ฑ์ | **ํ์ด์ง ์ ์ฒด์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ **ํ๋ ์คํ (ํผ ์ ์ฅ, ์์ธ ์์ ํ์ , ์ผ๊ด ๋ฐ์) |
|
|
1053
|
+
| `secondary` ์ฑ์ | **ํ์ด์ง ์ ์ค์ฌ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ** (์ ํ ํญ๋ชฉ ์ํ ๋ณ๊ฒฝ, ๋ฐ์ก, ์น์ธ) |
|
|
1054
|
+
| `outline` (`neutral` ยท `primary`) | ๋จ์ ๋ฑ๋ก, ์ค์ ๋ณ๊ฒฝ, ์ด๋ยท์ทจ์ |
|
|
1055
|
+
|
|
1056
|
+
- **`primary` ์ฑ์์ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ํํ๋ ์คํ ํ๋์๋ง ์ด๋ค. ๊ทธ๋ฐ ์กฐ์์ด ์์ผ๋ฉด ํ์ด์ง์ `primary` ๊ฐ ์์ด๋ ๋๋ค.** ๊ฐ์ ์ ํ์ด "๋ฐ๋์ ํ๋ ์์ด์ผ ํ๋ค"๋ ๋ป์ ์๋๋ค.
|
|
1057
|
+
- **`secondary` ์ฐ์ ๋ฐฐ์น ๊ธ์ง๋ ์น์
์ด ๋ค๋ฅด๋ฉด ์ ์ฉ๋์ง ์๋๋ค.** ์น์
๋ง๋ค ๋
๋ฆฝ ์ธ๋ผ์ธ ํผ์ด ์๋ ์์ธ ํ์ด์ง(ยง4-4)๊ฐ ๊ทธ๋ ๋ค โ ๋๋ํ ๋์ธ ๋ ๋ฒํผ์ด ๊ฐ์ ํ๋จ ๋จ์ ์์ ์์ ๋์ ๊ท์น์ด๋ค.
|
|
1058
|
+
|
|
878
1059
|
#### 3-5-2. `size` ๋ ๋์ด๋ ์์น๊ฐ ์ ํ๋ค
|
|
879
1060
|
|
|
880
1061
|
| ์์น | size |
|
|
@@ -980,6 +1161,98 @@ const columns: STableColumn[] = [
|
|
|
980
1161
|
</div>
|
|
981
1162
|
```
|
|
982
1163
|
|
|
1164
|
+
#### 3-5-7. `SSystemActionButton` โ GNB system ํจ๋์ ํ ์ค ์ก์
|
|
1165
|
+
|
|
1166
|
+
**ํ ์ ์ฒด๊ฐ ํ๋์ ๋ฒํผ**์ธ ํ๋ฉดํ ์ปจํธ๋กค์ด๋ค. ์์ด์ฝ ํ๋ ์ + ๋ผ๋ฒจ + ์ฐ์ธก ์ก์
์ด ํ ์ค์ ๋ถ๊ณ , hover ํ๋ฉด ํ๋ฉด์์ด ํ ๋จ๊ณ ๋ฐ๋๋ค.
|
|
1167
|
+
|
|
1168
|
+
| ์ํฉ | ์ฌ์ฉ |
|
|
1169
|
+
| --- | --- |
|
|
1170
|
+
| ํ์ด์งยท๋ชจ๋ฌ์ ์ผ๋ฐ ์ก์
| `SButton` โ ๋ผ๋ฒจ ํญ๋งํผ๋ง ์ฐจ์งํ๋ค |
|
|
1171
|
+
| ๋ชฉ๋ก์์ ํญ๋ชฉ ํ๋๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๋ค | `SListItem` ยท `STree` (ยง3-7-6ยทยง3-7-7) |
|
|
1172
|
+
| ์ข์ธก ๋ด๋น๊ฒ์ด์
์ ๋ฉ๋ด | `SGnb` ์ `menus` (ยง4-1) |
|
|
1173
|
+
| **GNB system ํจ๋์์ ์ค์ ยท์ฐ๊ฒฐ ์ํ๋ฅผ ํ ์ค์ฉ ์๊ณ , ๊ทธ ์ค์ ๋๋ฌ ๋ค์ด๊ฐ๊ฒ ํ๋ค** | **`SSystemActionButton`** |
|
|
1174
|
+
|
|
1175
|
+
**๋ฌด์์ด ๊ทธ๋ ค์ง๋์ง๋ `type` ์ด ์ ํ๋ค.** ํ์
๋ง๋ค ๋ค๋ฅธ ๊ฐ๋ง `option` ์ผ๋ก ๋ฐ์ผ๋ฏ๋ก, ํ์
์ ๋ง์ง ์๋ `option` ์ ํ์
์๋ฌ๊ฐ ๋๋ค.
|
|
1176
|
+
|
|
1177
|
+
| `type` | ์ ํ ์์ด์ฝ | ๋ผ๋ฒจ | ์ฐ์ธก | ์ธ์ |
|
|
1178
|
+
| --- | --- | --- | --- | --- |
|
|
1179
|
+
| `account` | `user` ๊ณ ์ | `label` | ์์ | ๋ก๊ทธ์ธํ ๊ณ์ ์ ๋ณด์ฌ์ค ๋. ๋๋ฅด๋ฉด **์ธ์ ๋** ๊ณ์ ๋ฆฌ์คํธ๋ฐ์ค๊ฐ ๋ฌ๋ค โ `option` ํ์ (ยง3-5-8) |
|
|
1180
|
+
| `select` | `option.icon` (ํ์) | `label` | ํ์ดํ | ๋๋ฌ์ ํ์ ํ๋ฉด์ผ๋ก ๋ค์ด๊ฐ ๋ |
|
|
1181
|
+
| `switch` | `option.icon` (ํ์) | `label` | `option.text` + ์๋ก๊ณ ์นจ | ์ง๊ธ ๋ถ์ด ์๋ ๋์์ ๊ฐ์ ๋ผ์ธ ๋ |
|
|
1182
|
+
| `subSelect` | `option.icon` (ํ์) | `label` | ์ง๊ธ ๊ฐ + ํ์ดํ | ๊ฐ์ ๋ณด์ฌ์ฃผ๊ณ **๋๋ฌ์ ๋ฐ๊ฟ** ๋. ๋๋ฅด๋ฉด ์ธ์ ๋ ๋ฉ๋ด๊ฐ ๋ฌ๋ค โ `option.options` ํ์ |
|
|
1183
|
+
| `status` | ์์ | ์ํ ํ๊ทธ(๊ณ ๋ฅธ ์นธ์ `color`ยท`label`) | ํ์ดํ | ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ **๋๋ฌ์ ๋ฐ๊ฟ** ๋. ๋๋ฅด๋ฉด ์ธ์ ๋ ๋ฉ๋ด๊ฐ ๋ฌ๋ค โ `option.options` ํ์ |
|
|
1184
|
+
|
|
1185
|
+
- **`SPage` ๋ณธ๋ฌธ์ ์ง์ ๋์ง ์๋๋ค.** ํญ์ ๊ฐ๋ ์ฑ์ฐ๋ ํ์ด๋ผ ํ์ด์ง์ ๋ฐ๋ก ๋์ผ๋ฉด ํ์ฒ๋ผ ๋ณด์ธ๋ค. GNB system ํจ๋ยท`SDrawer`ยท`SPopover` ์ฒ๋ผ **์ข์ ํญ์ด ์ ํด์ง ์๋ฆฌ**์ ์๋๋ค. ํ ์ฌ์ด ๊ฐ๊ฒฉ์ `--cmp-gnb-system-panel-gap` ์ด๋ค.
|
|
1186
|
+
- **GNB ์ system ์๋ฆฌ(๋งจ ์๋ ํ ยท ์ ํญ ์๋จ๋ฐ)์ ๋๋ ๊ฒ์ด๋ผ๋ฉด ์ด ๋ฒํผ์ ์ง์ ๋ฐฐ์นํ์ง ๋ง๊ณ `SGnbSystem` ์ `actions` ์ ๋๊ธด๋ค** (ยง4-1). ํจ๋์ ๋ฐฐ๊ฒฝยท๊ตฌ๋ถ์ ยท๋๋ฉ์ธ ํ๊ทธยท์๋ฆผยท๊ณ์ ๊น์ง ํ ๋ฒ๋ก ๊ทธ๋ ค์ฃผ๋ฏ๋ก, ์กฐ๊ฐ์ ์์ผ๋ก ์กฐ๋ฆฝํ ์ด์ ๊ฐ ์๋ค. **๋จ `type="account"` ๋ `actions` ๊ฐ ๋ฐ์ง ์๋๋ค** โ ๊ณ์ ํ์ ํจ๋์ ํ๋๋ฟ์ด๊ณ ์๋ฆฌ๋ ๋งจ ์๋๋ก ์ ํด์ ธ ์์ด `account` prop ์ด ๋ฐ๋ก ์๋ค (ยง3-5-8).
|
|
1187
|
+
- **`color` ๋ ๋์ด๋ ํ๋ฉด์ ๋ฐ๋ผ๊ฐ๋ค** โ ํฐ ๋ฉด์ด๋ฉด `light`, ์ค์
๋ธ๋ฃจ ๋ฉด์ด๋ฉด `dark`, ๋ค์ด๋น ๋ฉด์ด๋ฉด `darker`. ๋ฐฐ๊ฒฝ๊ณผ ๋ค๋ฅธ ์์ ๊ณ ๋ฅด๋ฉด ๋ฒํผ๋ง ๋ ๋ณด์ธ๋ค.
|
|
1188
|
+
- **์ํ๋ defaultยทhover ๋๋ฟ์ด๋ค.** ํ ํฐ์ selected ๊ฐ ์์ผ๋ฏ๋ก "์ง๊ธ ์ด๋ ค ์๋ ํญ๋ชฉ"์ ์ด ๋ฒํผ์ผ๋ก ํ์ํ์ง ์๋๋ค. ์ ํ ์ํ๊ฐ ํ์ํ ์๋ฆฌ๋ฉด `SGnb` ๋ฉ๋ด๋ `SListItem`(ยง3-7-6) ์ด๋ค.
|
|
1189
|
+
- **์ ํ ์์ด์ฝ์ด ๋น๋ ํ์ ์๋ค.** `account` ๋ `user` ๊ณ ์ , `status` ๋ ํ๊ทธ๊ฐ ์๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ , ๋๋จธ์ง๋ `option.icon` ์ด ํ์๋ค.
|
|
1190
|
+
- **`account` ์ `option` ๋ง ์ฑ๊ฒฉ์ด ๋ค๋ฅด๋ค** โ ์์ด์ฝ์ด ์๋๋ผ **๋๋ฅด๋ฉด ๋จ๋ ๊ณ์ ๋ฆฌ์คํธ๋ฐ์ค์ ๋ด์ฉ**์ด๊ณ , **ํ์๋ค** (ยง3-5-8). ๋๋ฌ๋ ์๋ฌด๊ฒ๋ ๋จ์ง ์๋ ๊ณ์ ํ์ ์๋ค โ ๊ณ์ ํ๋ฉด์ผ๋ก ๋๊ธฐ๋ ๊ฒ์ ์ด ํ์ด ์๋๋ผ ํจ๋์ `accountSetting` ์ด ๋งก๋๋ค.
|
|
1191
|
+
- **์ฐ์ธก ์์ด์ฝ์ `type` ์ด ์ ํ๋ฏ๋ก ๋ฐ์์ ๋ฐ๊พธ์ง ์๋๋ค.** ํ์ดํ๊ฐ ํ์ํ๋ฐ ๋ฌธ๊ตฌ๊ฐ ์์ผ๋ฉด `select`, ๋ฌธ๊ตฌ๊ฐ ํจ๊ป ํ์ํ๋ฉด `subSelect` ๋ค.
|
|
1192
|
+
- **`subSelect` ยท `status` ๋ ์ธ์ ๋ ๊ฐ ๊ณ ๋ฅด๊ธฐ ๋ฉ๋ด์ ํธ๋ฆฌ๊ฑฐ๋ค** โ ์ง๊ธ ๊ฐ์ด ์ ํ ์๋ ํ์ด๋ผ ๋๋ฅด๋ฉด ๊ทธ ๊ฐ์ ๋ฐ๊พธ๋ ๋ฉ๋ด๊ฐ ๋ฌ๋ค. ๊ทธ๋์ `option.options` ๊ฐ **ํ์**์ด๊ณ , ๋ฉ๋ด๋ **ํ ์ค๋ฅธ์ชฝ์ผ๋ก**, ํ ์์ชฝ ๋์ ๋ง์ถฐ ํผ์ณ์ง๋ค โ ์ด ํ์ ํ ์์ ์ธ๋ก๋ก ์์ด๋ ์๋ฆฌ๋ผ ์๋๋ก ํด๋ฉด ๋ฐ๋ก ๋ค์ ํ์ ๋ฎ๋๋ค. ๊ณ ๋ฅด๋ฉด `onChange(value)` ๊ฐ ๋๋ฉฐ ๋ซํ๋ค. **๋ฉ๋ด๋ฅผ ์์ผ๋ก ๋ง๋ค์ง ์๋๋ค** โ ๋จ๋ ์๋ฆฌยท๋ซํ๋ ์์ ์ด ์ด๊ธ๋๋ค. ๊ณ์ ํจ๋์ ์ธ์ด ๋ณ๊ฒฝ ํ(ยง3-5-8)๋ ๊ฐ์ ๋ฉ๋ด์ด์ง๋ง, ๊ทธ์ชฝ์ ํ ์์ ๊ฐํ ์์ด ์ฐ์ธก ๊ฐ ์๋๋ก ํธ๋ค.
|
|
1193
|
+
|
|
1194
|
+
```tsx
|
|
1195
|
+
<SSystemActionButton
|
|
1196
|
+
type="subSelect" label="์์
๊ณต๊ฐ"
|
|
1197
|
+
option={{ icon: 'board', value: workspaceId, options: WORKSPACES, onChange: setWorkspace }}
|
|
1198
|
+
/>
|
|
1199
|
+
<SSystemActionButton
|
|
1200
|
+
type="status"
|
|
1201
|
+
option={{ value: status, options: STATUSES, onChange: setStatus }} // STATUSES: { value, label, color? }[]
|
|
1202
|
+
/>
|
|
1203
|
+
```
|
|
1204
|
+
|
|
1205
|
+
- **`value` ๋ฅผ ํจ๊ป ์ค๋ค.** ์ฐ์ธก ๊ฐ(`subSelect`)ยท์ํ ํ๊ทธ(`status`)๋ `options` ์์ ๊ฐ์ `value` ๋ฅผ ์ฐพ์ ๊ทธ `label`(๊ณผ `status` ๋ `color`)๋ก ๊ทธ๋ฆฐ๋ค. ๋ชป ์ฐพ์ผ๋ฉด `value` ๋ฌธ์์ด์ด ๊ทธ๋๋ก ๋
ธ์ถ๋๋ฏ๋ก ๋ฐ๋์ ๋ง์ถฐ ์ค๋ค.
|
|
1206
|
+
- **๋๋ฌ์ ๊ฐ ๊ณ ๋ฅด๋ ํ๋ฉด์ผ๋ก ๋ณด๋ผ ๊ฒ์ด๋ฉด `select` ๋ค.** ๊ทธ ํ์
์ ํ์ ๋๋ฅด๋ ๊ฒ ์์ฒด๊ฐ ์ก์
์ด๋ผ `onClick` ๋ง ๋๋ค. ์ํ๋ฅผ **๋ณด์ฌ์ฃผ๊ธฐ๋ง** ํ ๊ฒ์ด๋ฉด ์ด ๋ฒํผ์ด ์๋๋ผ `STag`(ยง3-7-2) ๋ค โ ํ์ดํ๊ฐ ๋ถ๋ ํ์ "๋๋ฌ์ ๋ฐ๊พผ๋ค"๋ ์ฝ์์ด๋ค.
|
|
1207
|
+
- **ํ๊ทธ์ ์ยท์ด๋ฆ์ ๋ฐ์์ ์ง์ ์ฃผ์ง ์๋๋ค** (`status`). `option.color`ยท`option.label` ์ ์๋ค โ ์ง๊ธ ์ํ๊ฐ ๊ฐ๋ฆฌํค๋ `options` ์นธ์ด ๊ณง ํ๊ทธ๋ค. ์์ด ์ํ์ ๋ป์ด๋ผ ๋์ด ์ด๊ธ๋๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
1208
|
+
- **์ํ ๋ฉ๋ด์ ์์ ์นธ๋ง๋ค ์ค๋ค** โ ์ ๊ณผ ๊ธ์๊ฐ ๊ทธ ์ํ์ ์์ผ๋ก ํจ๊ป ๋ฌผ๋ ๋ค. ์ํ๋ ์ ์์ฒด๊ฐ ๋ป์ด๋ผ ๊ณ ๋ฅด๋ ์๋ฆฌ์์๋ ์์ ๋ณด๊ณ ๊ณ ๋ฅธ๋ค.
|
|
1209
|
+
- `switch` ๋ ๋ฉ๋ด๋ฅผ ๊ฐ์ง ์๋๋ค โ ์ฐ์ธก ๋ฌธ๊ตฌ๊ฐ "์ง๊ธ ๊ฐ"์ด ์๋๋ผ ๋ณด์กฐ ์กฐ์ ๋ฌธ๊ตฌ๋ผ, ๊ณ ๋ฅผ ๋ชฉ๋ก์ด ์์ผ๋ฉด ๊ทธ๊ฒ์ `subSelect` ๋ค.
|
|
1210
|
+
- ๋์ดยท๋ผ์ด๋ยท์์ด์ฝ ํฌ๊ธฐยท์ข์ฐ ์ฌ๋ฐฑ์ ์ ๋ถ ํ ํฐ์ด ๋ฃ๋๋ค. ์ง์ ์ฃผ์ง ์๋๋ค.
|
|
1211
|
+
|
|
1212
|
+
#### 3-5-8. `SAccountListBox` โ ๊ณ์ ํ์ ๋๋ฌ ๋จ๋ ๊ณ์ ํจ๋
|
|
1213
|
+
|
|
1214
|
+
**"์ง๊ธ ๋๊ตฌ๋ก ๋ก๊ทธ์ธํด ์๋๊ฐ"์ "์ฌ๊ธฐ์ ๋๊ฐ๋ค"๋ฅผ ํ ์๋ฆฌ์ ๋ชจ์ ํจ๋**์ด๋ค. ์์์๋ถํฐ [์ฌ์ฉ์์ ๋ณด(์ด๋ฉ์ผ ยท ์ด๋ฆ + ๊ถํ)] ยท [๊ณ์ ์ค์ ] ยท [์ธ์ด ๋ณ๊ฒฝ] ยท [๊ณ์ ๋ก๊ทธ์์] ์ด๋ค.
|
|
1215
|
+
|
|
1216
|
+
**์ง์ ๋์ฐ์ง ์๋๋ค.** ๊ณ์ ํ์ ๋ถ์ฌ ์ฌ๋ ๊ฒ์ ๋ ๊ณณ์ด ๋งก๋๋ค โ ์ด๋ ์ชฝ์ด๋ ๋จ๋ ๋ฐฉํฅยท๋ซํ๋ ์์ ์ ์ปดํฌ๋ํธ๊ฐ ์ ํ๋ฏ๋ก ์ฑ์ด ํ์ค๋ฒ๋ฅผ ์กฐ๋ฆฝํ์ง ์๋๋ค. **๋ ๊ณณ ๋ชจ๋ ์ด ๋ด์ฉ์ด ํ์๋ค** โ ๊ณ์ ํ์ ์์ธ ์์ด ์ด ํจ๋์ ํธ๋ฆฌ๊ฑฐ๋ผ, ๋๋ฌ๋ ์๋ฌด๊ฒ๋ ๋จ์ง ์๋ ๊ณ์ ํ์ ๋ง๋ค ์ ์๋ค.
|
|
1217
|
+
|
|
1218
|
+
| ์ด๋์ | ์ด๋ป๊ฒ |
|
|
1219
|
+
| --- | --- |
|
|
1220
|
+
| GNB ์ system ์๋ฆฌ (๊ธฐ๋ณธ) | `SGnbSystem` ์ `account.listBox` โ ํ์ (ยง4-1) |
|
|
1221
|
+
| system ๋ฐ์ **์ข์ ์ธ๋ก ํ ์๋์ชฝ** (SDrawerยทSPopover ํ๋จ ๋ฑ) | `SSystemActionButton type="account"` ์ `option` โ ํ์ |
|
|
1222
|
+
|
|
1223
|
+
```tsx
|
|
1224
|
+
<SGnbSystem
|
|
1225
|
+
account={{
|
|
1226
|
+
label: userName,
|
|
1227
|
+
listBox: {
|
|
1228
|
+
email: user.email,
|
|
1229
|
+
name: user.name,
|
|
1230
|
+
authority: user.authority, // ์ต์
|
|
1231
|
+
accountSetting: { onClick: openAccountSetting }, // ์ต์
|
|
1232
|
+
language: { // ์ต์
|
|
1233
|
+
value: languageCode,
|
|
1234
|
+
options: LANGUAGES, // ์ฃผ๋ฉด ํ์ ๋ฉ๋ด๊ฐ ํผ์ณ์ง๋ค
|
|
1235
|
+
onChange: setLanguage,
|
|
1236
|
+
},
|
|
1237
|
+
logout: { onClick: signOut },
|
|
1238
|
+
},
|
|
1239
|
+
}}
|
|
1240
|
+
/>
|
|
1241
|
+
```
|
|
1242
|
+
|
|
1243
|
+
- **`authority` ยท `accountSetting` ยท `language` ๋ ์ต์
์ด๊ณ , ์ฌ์ฉ์์ ๋ณด์ ๋ก๊ทธ์์ ํ์ ๋ ์๋ค.** ์ด ํจ๋์ด ์กด์ฌํ๋ ์ด์ ๊ฐ ๊ทธ ๋์ด๋ค. ์ต์
์ ๋นผ๋ฉด ๊ทธ ์ค์ด ํต์งธ๋ก ์ฌ๋ผ์ง๊ณ ๋๋จธ์ง๊ฐ ์๋ก ๋ถ์ผ๋ฏ๋ก, ์ค์ ์ง์ฐ๋ ค๊ณ ๋น ๋ฌธ์์ด์ด๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ฃ์ง ์๋๋ค (`accountSetting={{}}` ์ "์ด ํ์ ์ด๋ค" ๋ ๋ป์ด๋ค).
|
|
1244
|
+
- **๊ถํ prop ์ `authority` ๋ค (`role` ์๋).** `role` ์ DOM ์ ARIA ์์ฑ์ด๋ผ, ๊ทธ ์ด๋ฆ์ ์ฐ๋ฉด ์๋น ์ฑ์ a11y lint ๊ฐ "์ต๊ณ ๊ด๋ฆฌ์" ๋ฅผ ARIA ๋กค๋ก ์ฝ๊ณ ์คํจํ๋ค.
|
|
1245
|
+
- **`language` ๋ฅผ ์ฐ๋ฉด `value` ๋ฅผ ํจ๊ป ์ค๋ค.** ์ฐ์ธก์ ๋ถ๋ ๊ทธ ๊ฐ์ด "์ง๊ธ ๋ฌด์จ ์ธ์ด์ธ๊ฐ" ๋ค โ ์์ผ๋ฉด ์ฐ์ธก์ด ๋น์ด ๋๋ฌ์ผ ์ ์ ์๋ ํ์ด ๋๋ค.
|
|
1246
|
+
- **์ธ์ด๋ฅผ ์ฑ ์์์ ๋ฐ๊พธ๋ฉด `language.options` ๋ฅผ ์ค๋ค.** ๊ทธ ํ์ด ์ฐ์ธก ๊ฐ ์๋๋ก ํ์ ๋ฉ๋ด๋ฅผ ํด๊ณ , ๊ณ ๋ฅด๋ฉด `onChange(value)` ๊ฐ ๋๋ฉฐ ํ์ ๋ฉ๋ด์ ๊ณ์ ํจ๋์ด ํจ๊ป ๋ซํ๋ค. `value` ๋ `options` ์ `value` ์ ๋ง์ถ๋ฉด ๋๊ณ , ์ฐ์ธก์๋ ๊ทธ ํญ๋ชฉ์ `label` ์ด ์ ํ๋ค. **ํ์ ๋ฉ๋ด๋ฅผ ์์ผ๋ก ๋ง๋ค์ง ์๋๋ค** โ ๋จ๋ ์๋ฆฌยท๋ซํ๋ ์์ ์ด ์ด๊ธ๋๋ค.
|
|
1247
|
+
- **์ธ์ด๋ฅผ ๊ณ ๋ฅด๋ ํ๋ฉด์ด ๋ฐ๋ก ์์ผ๋ฉด `options` ๋ฅผ ์ฃผ์ง ์๋๋ค.** ๊ทธ๋ฌ๋ฉด ํ์ ๋๋ฅด๋ ๊ฒ ์์ฒด๊ฐ ์ก์
์ด๋ผ `onClick` ์ด ๋๊ณ ๊ณ์ ํจ๋์ด ๋ซํ๋ค. ๋์ ๊ฐ์ด ์ฃผ๋ฉด ํ๋ฉด์ผ๋ก ๊ฐ์ง ์๊ณ ๋ฉ๋ด๋ง ํด์ง๋ค.
|
|
1248
|
+
- ํ์ ๋ฉ๋ด๊ฐ ์ด๋ ค ์๋ ๋์ ๊ณ์ ํจ๋์ ๋ซํ์ง ์๋๋ค โ ์ธ์ด๋ฅผ ๊ณ ๋ฅด๋ ์ผ์ด ์์ง ๋๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
1249
|
+
- **ํ ์์ด์ฝ์ ๋ฐ์์ ๋ฐ๊พธ์ง ์๋๋ค.** ๋ฌด์์ ํ๋ ํ์ธ์ง๊ฐ ๊ณง ๊ทธ ํ์ ์ ์ฒด๋ค. ์๋น์ค ๋ฌธ๊ตฌ๊ฐ ๋ค๋ฅด๋ฉด `label` ๋ง ๋ฐ๊พผ๋ค.
|
|
1250
|
+
- **ํญ์ ๋๋ฆฌ์ง ์๋๋ค.** `--cmp-gnb-system-accountListBox-width` ๊ฐ ์ ํ๋ ๊ณ ์ ํญ์ด๋ค โ GNB ํญ์ ๋ง์ถฐ ๋จ๋ ํจ๋์ด๋ผ ๋๋ฆฌ๋ฉด ํ ์ฌ๋ฐฑ์ด ์ด๊ธ๋๋ค.
|
|
1251
|
+
- **ํ๋ฉด ์์ชฝ์ ๊ณ์ ํ์ ์ง์ ์ธ์ฐ์ง ์๋๋ค.** system ๋ฐ์ ์ธ์ด ๊ณ์ ํ์ ํจ๋์ **๋ ํ ์๋ก** ํผ์ณ์ง๋ค โ ๋ฐฉํฅ์ ๋ฐ๊พธ๋ prop ์ด ์์ผ๋ฏ๋ก ์๊ฐ ํ๋ฉด ๋์ธ ์๋ฆฌ(์ฑ ์๋จ๋ฐยทํค๋)์ ๋๋ฉด ์๋ฆฐ๋ค. ์ฑ ์๋จ๋ฐ์ ๊ณ์ ์ ์์ผ๋ก ๋ง๋ค์ง ๋ง๊ณ `SGnb` ์ `system` ์ฌ๋กฏ์ ๋งก๊ธด๋ค(`header="full"` ์ด๋ฉด ์กฐ๊ฐ๋ค์ด ์๋จ๋ฐ ์ค๋ฅธ์ชฝ ๋์ผ๋ก ์ฌ๋ผ๊ฐ๊ณ , ๊ทธ ์๋ฆฌ์์๋ ํจ๋์ด ์๋๋ก ํผ์ณ์ง๋ค โ ยง4-1).
|
|
1252
|
+
- **๋จ๋ ๋ฐฉํฅ์ prop ์ด ์๋๋ค โ ๋์ธ ์๋ฆฌ๊ฐ ์ ํ๋ค.** ํ์ด๋ฉด ๊ณ์ ํ์ด ๋งจ ์๋์ ์์ผ๋ฏ๋ก **์๋ก ยท ํ ์ผ์ชฝ ๋์ ๋ง์ถฐ**, ์ ํญ ์๋จ๋ฐ๋ฉด **์๋๋ก ยท ์ค๋ฅธ์ชฝ ๋์ ๋ง์ถฐ** ํผ์น๋ค(์ ํ ๋ ์ผ์ ํ๊ณผ ๊ฐ๋ค). ๋ฐฉํฅ์ ๋ฐ๊พธ๋ prop ์ ์์ผ๋ ์ฐพ์ง ์๋๋ค โ ๊ฐ์ ๊ณ์ ํ์ด ์ฑ๋ง๋ค ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋จ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
1253
|
+
- **`header="fix"` ์์ GNB ๋ฅผ ์ ๊ฑฐ๋ ํด๋ฉด ์ด๋ ค ์๋ ํจ๋์ ๋ซํ๋ค.** ๊ณ์ ํ์ด ๋ฉ๋ด ์ปฌ๋ผ ๋ฐ๋ฅ์์ ์ ํ ๋ ์ผ ๋ฐ๋ฅ์ผ๋ก(๋๋ ๋ฐ๋๋ก) ์ฎ๊ฒจ ์๊ธฐ ๋๋ฌธ์ด๋ค โ ๋ซํ๋ ๊ฒ์ ์ฑ์ด ๋ง์ ์ ์๊ณ , ๋ง์ ์ด์ ๋ ์๋ค(๋๋ฅธ ๊ทธ ํ์ด ํ๋ฉด์์ ์ฌ๋ผ์ง๋ค). ์ ํญ ์๋จ๋ฐ(`header="full"`)๋ ์ ์ด๋ ๊ณ์ ํ์ด ์ ์๋ฆฌ๋ผ ์ด๋ฆฐ ์ฑ ๋จ๋๋ค. **๊ทธ ๋ซํ์ ์์์ผ ํ๋ฉด `account.onOpenChange` ๋ฅผ ์ค๋ค** โ ์ด๋ฆผ์ ๋ฐ๋ผ ๊ทธ๋ฆฌ๋ ํ๋ฉด์ด ์ฑ์ ์์ ๋๋ง ํ์ํ๋ค.
|
|
1254
|
+
- **๋ก๊ทธ์์์ ์ฌ๊ธฐ ๋ง๊ณ ๋ค๋ฅธ ๊ณณ์ ๋ ๋์ง ์๋๋ค.** ๊ณ์ ์์ ๋๊ฐ๋ ๊ธธ์ด ํ๋ฉด๋ง๋ค ๋ค๋ฅด๋ฉด ์ฌ์ฉ์๊ฐ ๋งค๋ฒ ์ฐพ๋๋ค.
|
|
1255
|
+
|
|
983
1256
|
### 3-6. ์์ญ ๋๋๊ธฐ โ SDivider vs SSplitter
|
|
984
1257
|
|
|
985
1258
|
| ์ํฉ | ์ฌ์ฉ |
|
|
@@ -989,6 +1262,25 @@ const columns: STableColumn[] = [
|
|
|
989
1262
|
|
|
990
1263
|
`SSplitter` ์ ๊ตฌ๋ถ์ ์ ํ์ ์๋ฆฌ๋ง ์ก๊ณ ์น ํด์ง์ง ์๋ค๊ฐ, ๊ฒฝ๊ณ์ ์ปค์๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ํฌ์ปค์ค๋ฅผ ์ฃผ๋ฉด ๊ทธ๋ ๋๋ฌ๋๋ค โ ์กฐ์ ๊ฐ๋ฅํ ์๋ฆฌ๋ผ๋ ์ ํธ๋ค. **ํญ์ ๋ณด์ด๋ ์ ์ด ํ์ํ๋ฉด `SDivider` ๋ฅผ ์ด๋ค.** ์ ์ยท๋๊ปยท์ฃผ๋ณ ์ฌ๋ฐฑ์ ํ ํฐ์ด ์ ํ๋ฏ๋ก ์ง์ ์ฃผ์ง ์๋๋ค.
|
|
991
1264
|
|
|
1265
|
+
**์ธ๋ก ๊ตฌ๋ถ์ ์ ๊ธธ์ด๋ `height` prop ์ผ๋ก ์ค๋ค โ `className` ์ `h-*` ๋ก ์ฃผ์ง ์๋๋ค.**
|
|
1266
|
+
|
|
1267
|
+
```tsx
|
|
1268
|
+
// ์ค ๋์ด๋ฅผ ๊ทธ๋๋ก ์ฑ์ด๋ค (๊ธฐ๋ณธ)
|
|
1269
|
+
<div className="flex items-center gap-sd-8">
|
|
1270
|
+
<span>์ด ์ฃผ๋ฌธ 3๊ฑด</span>
|
|
1271
|
+
<SDivider vertical />
|
|
1272
|
+
<span>์ด ํ๋ชฉ 12๊ฑด</span>
|
|
1273
|
+
</div>
|
|
1274
|
+
|
|
1275
|
+
// ์์ ๊ธ์๋ณด๋ค ์งง์ ์ ์ด ํ์ํ ๋๋ง ๊ธธ์ด๋ฅผ ์ ํ๋ค
|
|
1276
|
+
<SDivider vertical height={20} />
|
|
1277
|
+
|
|
1278
|
+
// ํ์ง ๋ง ๊ฒ โ ์ ์ด ์ค ๋งจ ์์ ๋ถ๋๋ค
|
|
1279
|
+
<SDivider vertical className="h-sd-20" />
|
|
1280
|
+
```
|
|
1281
|
+
|
|
1282
|
+
๊ธธ์ด๋ฅผ ์ฃผ์ง ์์ผ๋ฉด `align-self: stretch` ๋ก ๋ถ๋ชจ ์ค ๋์ด๋ฅผ ์ฑ์ฐ๋๋ฐ, `stretch` ๋ ๋์ด๊ฐ `auto` ์ผ ๋๋ง ๋๋ฆฐ๋ค. `className` ์ผ๋ก ๋์ด๋ฅผ ์ ํ๋ฉด `stretch` ๊ฐ ์กฐ์ฉํ ๋ฌดํจ๊ฐ ๋์ด ์ ์ด ์๋ก ์๋๋ค. `height` ๋ ๊ธธ์ด์ ๊ต์ฐจ์ถ ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํจ๊ป ์ ์ฉํ๋ฏ๋ก ์ด ํจ์ ์ด ์๋ค โ ์ยท์๋ ์ ๋ ฌ์ด ํ์ํ๋ฉด `className="self-start"` ์ฒ๋ผ ๋ช
์ํ๋ค. (`sellmate/divider-vertical-height` ๊ท์น์ด ์ก๋๋ค.)
|
|
1283
|
+
|
|
992
1284
|
```tsx
|
|
993
1285
|
<SSplitter defaultValue={30} limits={[20, 60]}>
|
|
994
1286
|
<SSplitter.Before>๋ด๋น๊ฒ์ด์
</SSplitter.Before>
|
|
@@ -1003,7 +1295,7 @@ const columns: STableColumn[] = [
|
|
|
1003
1295
|
- ๋ชจ๋ธ์ ํญ์ **์ฒซ ํจ๋**(`SSplitter.Before`) ํฌ๊ธฐ๋ค. ์ฌ์ด๋๊ฐ ๊ธฐ์ค์ธ ํ๋ฉด์ด๋ฉด ์ฌ์ด๋๋ฅผ `Before` ์ ๋๋ค.
|
|
1004
1296
|
- ์ฑ ์
ธ์ GNB ํญ์ `SGnb` ๊ฐ ์์ ํ๋ค. `SLayout`/`SGnb` ๋ฅผ `SSplitter` ๋ก ๊ฐ์ธ์ง ์๋๋ค โ **GNB ํญ์ ๋ ์ ์๊ฒ ํ๋ ค๋ฉด `SGnb` ์ `resizable` ์ ์ค๋ค**(ยง4-1).
|
|
1005
1297
|
|
|
1006
|
-
**Quasar `q-splitter` ์์ ์ฎ๊ฒจ์ฌ ๋** โ `unit` ยท `limits` ยท `
|
|
1298
|
+
**Quasar `q-splitter` ์์ ์ฎ๊ฒจ์ฌ ๋** โ `unit` ยท `limits` ยท `updateWhileDragging` ๋ ์ด๋ฆ๊ณผ ๋ป์ด ๊ฐ๊ณ , ๋๋จธ์ง๋ ์๋์ฒ๋ผ ๋ฐ๋๋ค. `updateWhileDragging` ๋ฅผ ์ฃผ์ง ์์ผ๋ฉด **๋๋๊ทธ๋ฅผ ๋๋ ์๊ฐ ํ ๋ฒ๋ง** `onValueChange` ๊ฐ ์จ๋ค.
|
|
1007
1299
|
|
|
1008
1300
|
| q-splitter | SSplitter |
|
|
1009
1301
|
| --- | --- |
|
|
@@ -1019,18 +1311,42 @@ const columns: STableColumn[] = [
|
|
|
1019
1311
|
|
|
1020
1312
|
> ยง3-0 ๋ผ์ฐํ
์์ ์ด ์ ์ ๊ฐ๋ฆฌํค๋ ์๋ฆฌ๋ค์ด๋ค. <!-- TODO(๋์์ธ): ์ ์ฒด ๊ฒ์ยทํ์ -->
|
|
1021
1313
|
|
|
1022
|
-
#### 3-7-1. SInput vs STextarea
|
|
1314
|
+
#### 3-7-1. SInput vs STextarea vs SEditor vs SSearchInput
|
|
1023
1315
|
|
|
1024
|
-
|
|
1316
|
+
**๋จผ์ "๊ทธ ๊ฐ์ด ์ ์ฅ๋๋๊ฐ"๋ฅผ ๋ณธ๋ค.** ์ ์ฅ๋๋ฉด ํผ ํ๋(`SInput`ยท`STextarea`), ํ๋ฉด์ ์ขํ๊ธฐ๋ง ํ๊ณ ์ฌ๋ผ์ง๋ฉด `SSearchInput` ์ด๋ค.
|
|
1025
1317
|
|
|
1026
1318
|
| ๊ฐ | ์ฌ์ฉ |
|
|
1027
1319
|
| --- | --- |
|
|
1028
1320
|
| ์ด๋ฆยท์ฝ๋ยท์ ํ๋ฒํธยทURL ์ฒ๋ผ ํ์์ด ์ ํด์ง ๊ฐ | `SInput` |
|
|
1029
1321
|
| ๋ฉ๋ชจยท์ฌ์ ยท์ค๋ช
์ฒ๋ผ ๊ธธ์ด๊ฐ ์์ธก๋์ง ์๋ ๋ฌธ์ฅ | `STextarea` |
|
|
1322
|
+
| ์์(์ ๋ชฉยท๊ตต๊ฒยท๋ชฉ๋กยท์ ๋ ฌยท์ยท๋งํฌยท์ด๋ฏธ์ง)์ด ๊ฐ์ ์ผ๋ถ๋ก ์ ์ฅ๋์ด์ผ ํ๋ ๊ธ | `SEditor` |
|
|
1323
|
+
| ์ง๊ธ ๋ณด์ด๋ ๋ชฉ๋กยท๊ฒฐ๊ณผ๋ฅผ ์ขํ๋ ๊ฒ์์ด | `SSearchInput` |
|
|
1324
|
+
|
|
1325
|
+
ํผ ํ๋ ๋์ **์ค ์๊ฐ ์๋๋ผ ๊ฐ์ ์ฑ๊ฒฉ์ผ๋ก** ๊ฐ๋ฆฐ๋ค. ๊ฐ์ด ๊ธธ์ด์ง ์ ์๋๋ฐ `SInput` ์ ์ฐ๋ฉด ์ฌ์ฉ์๊ฐ ์๊ธฐ๊ฐ ์ด ๊ฒ์ ๋ค์ ์ฝ์ง ๋ชปํ๋ค โ ํ ์ค ์์์ ์ข์ฐ๋ก ์คํฌ๋กคํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋๋ก ์งง์ ๊ฐ์ `STextarea` ๋ฅผ ์ฐ๋ฉด ๋น ๊ณต๊ฐ์ด ๋จ์ ์
๋ ฅ๋์ ์๋ชป ๊ธฐ๋ํ๊ฒ ํ๋ค.
|
|
1030
1326
|
|
|
1031
|
-
|
|
1327
|
+
`SEditor` ๋ **์์์ด ๊ฐ์ ์ผ๋ถ์ผ ๋๋ง** ์ด๋ค. ๊ฐ์ HTML ๋ฌธ์์ด๋ก ์ฃผ๊ณ ๋ฐ์ผ๋ฏ๋ก ์ ์ฅยท๊ฒ์ยท๋น๊ต๊ฐ ํ๋ฌธ๋ณด๋ค ๋น์ธ๊ณ , ํ๋ฉด์ ๋ค์ ๋ณด์ฌ์ค ๋๋ HTML ๋ก ๋ ๋ํด์ผ ํ๋ค. ์์์ด ํ์ ์๋ ๋ฉ๋ชจยท์ฌ์ ๋ `STextarea` ๋ค โ "์
๋ ฅ์ฐฝ์ด ์ปค ๋ณด์ฌ์" ๊ณ ๋ฅด๋ ์ปดํฌ๋ํธ๊ฐ ์๋๋ค. ๋ฐ๋๋ก ๊ณต์งยท์๋ด๋ฌธยท์ํ ์์ธ์ฒ๋ผ **์์ฑ์๊ฐ ์ ํ ๊ฐ์กฐ์ ๋ชฉ๋ก์ด ๊ทธ๋๋ก ๋ณด์ฌ์ผ ํ๋ ๊ธ**์ด๋ฉด `STextarea` ๋ก๋ ํํํ ์ ์๋ค.
|
|
1032
1328
|
|
|
1033
|
-
|
|
1329
|
+
`SEditor` ๋ `SInput`ยท`STextarea` ์ ๊ฐ์ ํผ ํ๋๋ค โ `label`ยท`hint`ยท`rules`ยท`errorMessage` ๋ฅผ ์๊ธฐ prop ์ผ๋ก ๋ฐ๊ณ `SForm` ์ ์ถ ๊ฒ์ฆ์๋ ๋ค์ด๊ฐ๋ค. ๋น ๋ฌธ์๋ ๋น ๋ฌธ์์ด๋ก ๋์ค๋ฏ๋ก `required` ๊ท์น์ด ๊ทธ๋๋ก ๊ฑธ๋ฆฐ๋ค. **ํด๋ฐ๋ฅผ ๋๋ ๊ธธ์ ์๋ค** โ ์์ ์
๋ ฅ์ด ํ์ ์๋ ์๋ฆฌ๋ผ๋ฉด ์์ ์๋ `SEditor` ๊ฐ ์๋๋ผ `STextarea` ๋ฅผ ๊ณ ๋ฅธ๋ค.
|
|
1330
|
+
|
|
1331
|
+
ํด๋ฐ๋ **ํ๋ฆฌ์
๋ ์ค ํ๋๋ฟ์ด๋ค.** ๊ธฐ๋ณธ์ ์ธ ์ ์๋ ๊ฒ์ ๋ชจ๋ ๋ณด์ด๊ณ , **`simple` ์ ์ผ๋ฉด ๊ธ์์ ๊ฑฐ๋ ์์๋ง ๋จ๋๋ค** โ ๋ชฉ๋กยท์ ๋ ฌยท์ธ์ฉยท์ฝ๋ยท๋งํฌยท์ด๋ฏธ์งยท๊ตฌ๋ถ์ ์ด ๋น ์ง๊ณ ์ ํํ์ ๋ ๋จ๋ ํ๋ ๊ฐ์ ๋ฒ์๋ก ์ค์ด๋ ๋ค. ๋ฐ์ ๊ธ์ **๋ฌธ๋จ ๊ตฌ์กฐ๊น์ง ์์ฑ์๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด ๊ณค๋ํ ์๋ฆฌ**(์ข์ ์นธ์ ๋ฉ๋ชจยท์ฌ์ ยท์งง์ ์๋ด๋ฌธ)๊ฐ `simple` ์ด๋ค. ํญ๋ชฉ์ ์ง์ ์กฐํฉํ๋ prop ์ ์๋ค โ ํ๋ฉด๋ง๋ค ๋ค๋ฅธ ํด๋ฐ๊ฐ ์๋ฉด ๊ทธ ์์ฒด๊ฐ ํ์ต ๋น์ฉ์ด ๋๋ค.
|
|
1332
|
+
|
|
1333
|
+
๋ณธ๋ฌธ์์ ๋ฐ์ดํยทํ์ดํยทํ์ดํ๋ **์๋์ผ๋ก ์นํ๋๋ค**(`"` โ `โโ`, `--` โ `โ`, `->` โ `โ`). ๋ ์ ์์ผ๋ฏ๋ก, ์ํ ์ฝ๋ยท๊ท๊ฒฉ ๋ฌธ์์ด์ฒ๋ผ **์
๋ ฅํ ๊ทธ๋๋ก ๋จ์์ผ ํ๋ ๊ฐ**์ `SEditor` ๋ณธ๋ฌธ์ด ์๋๋ผ `SInput` ์ผ๋ก ๋ฐ๋ก ๋ฐ๋๋ค.
|
|
1334
|
+
|
|
1335
|
+
ํด๋ฐ๋ **์๋ฆฌ๋ฅผ ์งํจ๋ค**(๊ณ ์ ). ๊ธด ๊ธ์ ์ฐ๋ ๋์ ๋ง๋๊ฐ ํ๋ฉด ๋ฐ์ผ๋ก ๋๊ฐ์ง ์์ผ๋ฏ๋ก, ํด๋ฐ๋ฅผ ๋ฐ๋ก ๊ฐ์ธ๊ฑฐ๋ ์์น๋ฅผ ์ฃผ์ง ์๋๋ค.
|
|
1336
|
+
|
|
1337
|
+
ํด๋ฐ์๋ **๊ธ์ ํฌ๊ธฐ ๋๋กญ๋ค์ด**๊ณผ **๊ธ์์ ํ๋ ํธ**๊ฐ ๋ค์ด ์๋ค โ ์์ฑ์๊ฐ ๋ฌธ๋จ๋ง๋ค ํฌ๊ธฐยท์์ ์ง์ ์ง์ ํ ์ ์๊ณ , ํฌ๊ธฐ ๋ชฉ๋ก ๋งจ ์ `๊ธฐ๋ณธ` ์ ์ง์ ์ ๋ผ๋ ์๋ฆฌ๋ค. ํฌ๊ธฐ ๋๊ธ์ ํ๋ฉด ํ์ดํฌ(ยง2-1)๊ฐ ์๋๋ผ ์๋ํ๋ก์ธ์์ ๋๊ธ์ด๋ผ ๋ณธ๋ฌธ๋ณด๋ค ํจ์ฌ ํฐ ๋จ๊ณ๊น์ง ์๋ค. **๋๊ธ๋ ํ๋ ํธ๋ ์ขํ๋ prop ์ด ์๋ค** โ ํ๋ฉด๋ง๋ค ๊ณ ๋ฅผ ์ ์๋ ๊ฒ์ด ๋ค๋ฅด๋ฉด ๊ฐ์ ๊ธ์ด ์ด๋์ ๋ถ๋๋์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ **์์ฑ์๊ฐ ํ๋ฉด ๋ฆฌ๋ฌ์ ๋ฒ์ด๋๋ฉด ๊ณค๋ํ ์๋ฆฌ(์ํ ์์ธ ์ค๋ช
ยท๋ฐ๋ณต ๋
ธ์ถ๋๋ ์๋ด๋ฌธ ๋ฑ)๋ผ๋ฉด `SEditor` ๊ฐ ๋ง๋ ์๋ฆฌ์ธ์ง ๋จผ์ ๋ณธ๋ค** โ ์์์ด ๊ฐ์ ์ผ๋ถ๊ฐ ์๋๋ผ๋ฉด `STextarea` ๋ค. ๊ณ ๋ฅธ ํฌ๊ธฐยท์์ ์ ์ฅ๋๋ HTML ์ ๊ทธ๋๋ก ๋จ์ ๋์ค์ ๋๋๋ฆด ์ ์๋ค.
|
|
1338
|
+
|
|
1339
|
+
๋ณธ๋ฌธ์๋ **ํ**๋ ๋ค์ด๊ฐ๋ค โ ํด๋ฐ์ `ํ` ๋๋กญ๋ค์ด์์ ๊ฒฉ์๋ฅผ ๋์ด ํฌ๊ธฐ๋ฅผ ๊ณ ๋ฅด๊ณ (์ต๋ 8ํ ร 10์ด), ํยท์ด์ ๋๋ฆฌ๊ณ , ์นธ์ ๋ณํฉํ๋ค. **์ด ๋๋น๋ ๊ท ๋ฑ ๊ณ ์ ์ด๊ณ ๋ฐ๊ฟ ์ ์๋ค**: ๋๋น๋ฅผ ์ ์ฅํ๋ฉด ๊ทธ ๊ฐ์ด px ๋ก ๋ฐํ ์์ฑํ ํ๋ฉด๋ณด๋ค ์ข์ ๊ณณ์์ ํ๊ฐ ๋์น๋ค. ๋์ ์ด๋ค ํญ์์๋ ํ๊ฐ ์์ ์์ ๋ค์ด์ค๋๋ก ์ด์ ๊ณ ๋ฅด๊ฒ ๋๋๋ค โ ์ด์ด ๋ง์ ํ๋ ์ข์ ์นธ์์ ๊ธ์๊ฐ ์๊ฒ ์ ํ๋ฏ๋ก, **์ด์ด ๋ท์ ๋์ด๊ฐ๋ ํ๋ผ๋ฉด `SEditor` ๋ณธ๋ฌธ์ด ์๋๋ผ `STable` ์ด ๋ง๋ ์๋ฆฌ์ธ์ง ๋ณธ๋ค.** ํ๋ ์์ฑ์๊ฐ ์ฐ๋ ๊ธ์ ์ผ๋ถ์ผ ๋๋ง ์ฌ๊ธฐ์ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ค ์ธ์ ๋ณด์ฌ ์ฃผ๋ ๊ฒ์ `STable` ์ด๋ค.
|
|
1340
|
+
|
|
1341
|
+
๊ธ์ ์ ํํ๋ฉด **๊ทธ ์์ ์์ ํ์ด ๋ฌ๋ค**(๋ฒ๋ธ ๋ฉ๋ด). ํด๋ฐ๊น์ง ์ปค์๋ฅผ ์ฎ๊ธฐ์ง ์๊ณ ๋ฐ๋ก ๊ตต๊ฒยท์ยท๋งํฌ๋ฅผ ๊ฑฐ๋ ๊ธธ์ด๋ค. **๋๊ณ ์ผ๋ prop ์ ์๋ค** โ ํธ์งํ ์ ์์ผ๋ฉด ์ธ์ ๋ ๋จ๊ณ , ์ฝ๊ธฐ ์ ์ฉยท๋นํ์ฑ์ผ ๋๋ ๋จ์ง ์๋๋ค. ํ๋ฉด๋ง๋ค ์๊ณ ์๊ณ ๊ฐ ๋ฌ๋ผ์ง๋ฉด ๊ทธ ์์ฒด๊ฐ ํ์ต ๋น์ฉ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ ๊ตฌ์ฑ์ `simple` ์ด ๋ง๋์ ํจ๊ป ์ ํ๋ค. ๋จ๋ ์๋ฆฌ๋ DS ๊ฐ ์ก๋๋ค, ์ง์ ๊ฐ์ธ๊ฑฐ๋ ์์น๋ฅผ ์ฃผ์ง ์๋๋ค.
|
|
1342
|
+
|
|
1343
|
+
`SEditor` ๋ ํ๋ฉด์ ์ฒ์ ๋์ผ ๋ **์๋ํฐ ์์ง์ ๋ฐ๋ก ๋ถ๋ฌ์จ๋ค** โ ์ฑ ์ด๊ธฐ ๋ฒ๋ค์๋ ๋ค์ด๊ฐ์ง ์๋๋ค. ๊ทธ๋์์ ๊ฐ์ ํฌ๊ธฐ์ ๋น ํธ์ง ์์ญ์ด ์๋ฆฌ๋ฅผ ์งํค๋ฏ๋ก ๋ ์ด์์์ ํ๋ค๋ฆฌ์ง ์์ง๋ง, **๋ง์ดํธํ์๋ง์ `ref.current.getHTML()` ๋ก ๊ฐ์ ์ฝ๊ฑฐ๋ ํด๋ฐ๋ฅผ ๋๋ฅผ ์๋ ์๋ค.** ์ด์๋ง์ ์ปค์๋ฅผ ๋๊ณ ์ถ์ผ๋ฉด `ref.current.focus()` ๋ฅผ ๊ทธ๋ฅ ๋ถ๋ฅด๋ฉด ๋๋ค โ ์ค๋น๋๋ ์๊ฐ ๋์ ์คํ๋๋ค.
|
|
1344
|
+
|
|
1345
|
+
**์ด๋ฏธ์ง๋ฅผ ๋ฃ์ผ๋ ค๋ฉด `onImageUpload` ๋ฅผ ์ค๋ค** โ ๊ณ ๋ฅธ ํ์ผ์ ์ ์ฅํ๊ณ ํ์ํ URL ์ ๋๋ ค์ฃผ๋ ํ
์ด๋ค. ์ ์ฅ ์์น๋ ์ฑ๋ง๋ค ๋ค๋ฅด๋ฏ๋ก DS ๊ฐ ์ ํ์ง ์๊ณ , ํ
์ด ์์ผ๋ฉด ํด๋ฐ์์ ์ด๋ฏธ์ง ํญ๋ชฉ์ด ๋น ์ง๋ค. ๋ณธ๋ฌธ์ base64 ๋ฅผ ๋ฐ๋ ๊ธธ์ ๋ง์ ๋์๋ค โ ์ ์ฅ HTML ์ด ์ MB ๋ก ๋ถํ์ด ๊ทธ๋๋ก DBยทAPI ์ ์ค๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
1346
|
+
|
|
1347
|
+
`SSearchInput` ์ ํผ ํ๋๊ฐ ์๋๋ค โ ๋ผ๋ฒจยทํํธยท์ ํจ์ฑ ๊ท์นยท์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์ง ์๊ณ , `SForm` ์ ์ ์ถ ๊ฒ์ฆ ๋์์๋ ๋ค์ด๊ฐ์ง ์๋๋ค. ๋๋ณด๊ธฐ ์์ด์ฝ์ด ํญ์ ์์ ๋ถ์ด "์ฌ๊ธฐ๋ ๊ฒ์"์์ ์ค์ค๋ก ๋ฐํ๋ฏ๋ก ๋ผ๋ฒจ์ ๋ฐ๋ก ๋ถ์ด์ง ์๋๋ค. ๊ฒ์ ์คํ์ `onSearch`(Enter) ๋ก ๋ฐ๊ณ , ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ์ขํ๋ ์ค์๊ฐ ํํฐ๋ผ๋ฉด `onValueChange` ๋ง ์ด๋ค. ๋ฐ๋๋ก ๊ฒ์์ด๋ฅผ **์ ์ฅํ๊ฑฐ๋ ๊ฒ์ฆํด์ผ ํ๋ค๋ฉด** ๊ทธ๊ฒ์ ํผ ๊ฐ์ด๋ฏ๋ก `SInput` ์ด๋ค.
|
|
1348
|
+
|
|
1349
|
+
#### 3-7-2. ํ๋๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๋ ์ฌ์ฏ โ SSelect vs SRadioGroup vs SRadioCardGroup vs SRadioButton vs STabs vs SRadio
|
|
1034
1350
|
|
|
1035
1351
|
**๋จผ์ "๊ณ ๋ฅด๋ฉด ๋ฌด์์ด ๋ฐ๋๋๊ฐ"๋ฅผ ๋ณธ๋ค.**
|
|
1036
1352
|
|
|
@@ -1041,10 +1357,17 @@ const columns: STableColumn[] = [
|
|
|
1041
1357
|
| --- | --- |
|
|
1042
1358
|
| 6๊ฐ ์ด์, ๋๋ ์๋ฒ์์ ์ค๋ ๋์ ๋ชฉ๋ก | `SSelect` |
|
|
1043
1359
|
| 2~5๊ฐ ๊ณ ์ + ์ ํ์ง๋ฅผ ํญ์ ๋ณด์ฌ์ผ ํจ | `SRadioGroup` |
|
|
1360
|
+
| 2~5๊ฐ ๊ณ ์ + **์ ํ์ง๋ง๋ค ์ค๋ช
ํ ์ค์ด ํ์ํจ** | `SRadioCardGroup` |
|
|
1044
1361
|
| 2~4๊ฐ + ์งง์ ๋ผ๋ฒจ์ ๋ฐฐํ์ ๋ชจ๋ ์ ํ (์ธ๊ทธ๋จผํธ) | `SRadioButton` |
|
|
1045
1362
|
|
|
1046
1363
|
- **`SRadio` ๋ฅผ ์ง์ ๋์ดํ์ง ์๋๋ค.** ๊ทธ๋ฃน ๊ฐ๊ฒฉ์ `SRadioGroup` ์ด ๋ง์ถ๋ค (ยง2-2). `SRadio` ๋จ๋
์ `SRadioGroup` ์ด ๋ง๋ค ์ ์๋ ๋ฐฐ์น โ ํ ์
์์ ํ๋ง๋ค ํ๋์ฉ ๋๋ ๊ฒฝ์ฐ โ ์๋ง ์ด๋ค.
|
|
1047
1364
|
- `SRadioButton` ์ `options` ๋ฅผ ํต์งธ๋ก ๋ฐ๋ ์ธ๊ทธ๋จผํธ ์ปจํธ๋กค์ด๋ผ `SRadio` ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฃ๋ ๊ฒ ์๋๋ค.
|
|
1365
|
+
- **`SRadioGroup` ๊ณผ `SRadioCardGroup` ์ ๊ฐ๋ฆผ๊ธธ์ "์ค๋ช
์ด ํ์ํ๊ฐ" ํ๋๋ค.** ๋ผ๋ฒจ๋ง์ผ๋ก ๋ป์ด ํตํ๋ฉด `SRadioGroup`, ๊ณ ๋ฅด๊ธฐ ์ ์ ํ ์ค ์ค๋ช
์ ์ฝ์ด์ผ ํ๋ฉด `SRadioCardGroup` ์ด๋ค. ๋ผ๋ฒจ ์์ ์ค๋ช
์ ๊ดํธ๋ก ๋ง๋ถ์ฌ ๋์ด์ง ์๋๋ค.
|
|
1366
|
+
- **`SRadioCardGroup` ์ `SRadioGroup` ์ ๋์ฒด๊ฐ ์๋๋ผ ๊ฒฉ์ํ์ด๋ค.** ๋ผ๋ฒจ์ด ํ ๋จ๊ณ ํฌ๊ณ ๊ทธ ์๋ ์ค๋ช
์ค๊น์ง ๋ค์ด๊ฐ ์นด๋ ํ ์ฅ์ด ์๋ฆฌ๋ฅผ ๋๋ํ ์ด๋ค โ ์ ํ์ง๊ฐ ์กฐ๋ฐํ๊ฒ ๋ฐ๋ณต๋๋ ์๋ฆฌ์๋ ๊ณผํ๋ค.
|
|
1367
|
+
- **์ฐ๋ ์๋ฆฌ๋ ์ค์ ํ๋ฉดยท๋ง๋ฒ์ฌ(์คํ
)์ ์์ ๊ฒฐ์ ์ด๋ค.** ๊ณ ๋ฅด๊ณ ๋๋ฉด ๋ค ํ๋ฉด์ด ํต์งธ๋ก ๋ฐ๋๊ฑฐ๋ ๋๋๋ฆฌ๊ธฐ ์ด๋ ค์ด ์ ํ โ ํ๊ฐ ๋์์ ๋ฒ์(์ ์ฒด/ํน์ ๊ตฌ์ฑ์), ์๋ด ์๋ ๋ฐฐ์ ๋ฐฉ์ ๊ฐ์ ๊ฒ. ๋ชฉ๋ก ํํฐยทํ ์ ์กฐ๊ฑด์ฒ๋ผ ๊ฐ์ ์ ํ์ง๊ฐ ํ๋ฉด๋ง๋ค ๋ฐ๋ณต ๋
ธ์ถ๋๋ ์๋ฆฌ์๋ `SRadioGroup` ์ ์ด๋ค.
|
|
1368
|
+
- `SRadioCard` ๋จ๋
์ `SRadioCardGroup` ์ด ๋ง๋ค ์ ์๋ ๋ฐฐ์น์๋ง ์ด๋ค โ ๋์ด์ ๊ทธ๋ฃน์ด ๋งก๋๋ค (ยง2-2).
|
|
1369
|
+
- ์นด๋ ์์ ์ํ ๋ฐฐ์ง๋ฅผ ๋ฃ์ผ๋ ค๋ฉด `tag` ์ฌ๋กฏ์ `STag` ๋ฅผ ์ค๋ค. ๋ผ๋ฒจ ๋ฌธ์์ด์ "(์ถ์ฒ)" ์ฒ๋ผ ์์ด ์ฐ์ง ์๋๋ค.
|
|
1370
|
+
- **์นด๋์ฒ๋ผ ์๊ฒผ๋ค๊ณ `SCard`/`SSectionHeaderCard` ๋ก ๊ฐ์ธ์ง ์๋๋ค.** `SRadioCard` ์์ฒด๊ฐ ์๊ฒฐ๋ ์์์ด๊ณ , ๋์ด ๊ฐ๊ฒฉ์ `SRadioCardGroup` ์ `direction` ์ด ๋ง์ถ๋ค (ยง2-2).
|
|
1048
1371
|
|
|
1049
1372
|
#### 3-7-3. ์ผ๊ณ ๋๋ ์
โ SCheckbox vs SSwitch vs SToggle
|
|
1050
1373
|
|
|
@@ -1060,7 +1383,7 @@ const columns: STableColumn[] = [
|
|
|
1060
1383
|
- ์ฝ๊ด ๋์์ฒ๋ผ **์ ์ถ ์์ ์ ๊ฐ์ด ํ์ํ ๊ฒ์ ํญ์ `SCheckbox`** ๋ค โ ๋ชจ์์ด ์ค์์น์ ๊ฐ๊น์ ๋ณด์ฌ๋ ๊ทธ๋ ๋ค.
|
|
1061
1384
|
- `SToggle` ์ ์์ฝํ ๋ฒํผ์ด๋ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ฐ๋ก๋ก ๋์ด๋๋ ํํฐ ์๋ฆฌ์ ๋ง๋๋ค. ์ค์ ํ๋ฉด์ on/off ํ ์ค์๋ ์ฐ์ง ์๋๋ค.
|
|
1062
1385
|
|
|
1063
|
-
#### 3-7-4. ๋ ์ง ์
โ SDatePicker vs SDateRangePicker vs SCalendar
|
|
1386
|
+
#### 3-7-4. ๋ ์ง ์
โ SDatePicker vs SDateRangePicker vs SCalendar vs SCalendarBoard
|
|
1064
1387
|
|
|
1065
1388
|
| ํ๋ณ | ์ฌ์ฉ |
|
|
1066
1389
|
| --- | --- |
|
|
@@ -1068,10 +1391,19 @@ const columns: STableColumn[] = [
|
|
|
1068
1391
|
| ์ฐ๋ ์ ํ ๋ฆฌ์คํธ๋ง ํ์ํ๋ค (ํธ๋ฆฌ๊ฑฐยทํ์ค๋ฒ๋ ์ง์ ์กฐํฉ) | `SDatePickerYearListbox` |
|
|
1069
1392
|
| ์ฐ๋+์ ์ ํ ๋ฆฌ์คํธ๋ง ํ์ํ๋ค (ํธ๋ฆฌ๊ฑฐยทํ์ค๋ฒ๋ ์ง์ ์กฐํฉ) | `SDatePickerMonthListbox` |
|
|
1070
1393
|
| **์์~์ข
๋ฃ** ๋ฅผ ๊ฐ์ผ๋ก ๋ฐ๋๋ค | `SDateRangePicker` |
|
|
1071
|
-
| ๋ฌ๋ ฅ ๊ฒฉ์ **์์ฒด๊ฐ ํ๋ฉด ์ฝํ
์ธ ** ๋ค (
|
|
1394
|
+
| ๋ฌ๋ ฅ ๊ฒฉ์ **์์ฒด๊ฐ ํ๋ฉด ์ฝํ
์ธ ** ๋ค (๋ ์ง๋ฅผ ๊ณ ๋ฅด๊ฒ ํ๋ค) | `SCalendar` |
|
|
1395
|
+
| ํ ๋ฌ์น **์ผ์ ์ ์ฝ๊ฒ** ํผ์น๋ค (์นธ๋ง๋ค ์ฌ๋ฌ ๊ฑด) | `SCalendarBoard` |
|
|
1072
1396
|
|
|
1073
1397
|
- **๊ธฐ๊ฐ์ `SDatePicker` ๋ ๊ฐ๋ก ๋ง๋ค์ง ์๋๋ค.** ์์์ด ์ข
๋ฃ๋ณด๋ค ๋ค์ธ ์
๋ ฅ์ ๋ง๋ ๊ฒ์ฆ๊ณผ ํ์ชฝ๋ง ๊ณ ๋ฅธ ์ค๊ฐ ์ํ ์ฒ๋ฆฌ๊ฐ `SDateRangePicker` ์์ ์ด๋ฏธ ์๋ค. ๋ ๊ฐ๋ก ์ชผ๊ฐ๋ฉด ๊ทธ๊ฒ ์ ๋ถ ์ฑ ๋ชซ์ด ๋๋ค.
|
|
1074
1398
|
- `SDatePicker`ยท`SDateRangePicker` ๋ ๋ด๋ถ์ ์ผ๋ก `SCalendar` ๋ฅผ ํ์ค๋ฒ๋ก ๋์ด๋ค. ๊ฐ์ ๋ฐ๋ ์๋ฆฌ์ `SCalendar` ๋ฅผ ์ง์ ์ฐ์ง ์๋๋ค.
|
|
1399
|
+
- **`SCalendar` ์ `SCalendarBoard` ๋ ๋ฐฉํฅ์ด ๋ฐ๋๋ค.** `SCalendar` ๋ ๋ ์ง๋ฅผ **๊ณ ๋ฅด๋** ๋ฌ๋ ฅ(์นธ์๋ ์ ๋ง ์ฐํ๋ค)์ด๊ณ , `SCalendarBoard` ๋ ์ผ์ ์ **์ฝ๋** ๋ฌ๋ ฅ์ด๋ค โ ์นธ๋ง๋ค ์ผ์ ์ด ์ค๋ก ์์ด๊ณ , ์นธ ๋์ด์ ๋ด๊ธฐ๋ ์ค ์๋ฅผ ๋์ผ๋ฉด "N๊ฐ ๋๋ณด๊ธฐ" ๋ก ์ ํ๊ณ , **"๋๋ณด๊ธฐ" ๋๋ ์ผ์ ์ด ์๋ ์นธ ์๋ฌด ๋ฐ๋** ๋๋ฅด๋ฉด **๊ทธ ์นธ์ ๋ฎ์ผ๋ฉฐ ๋จ๋ ํ**์ ๊ทธ ๋ ์ง์ ์ผ์ ์ด ์ ๋ถ ํผ์ณ์ง๋ค. ํญ๋ ๋ค๋ฅด๋ค: `SCalendar` ๋ ์ ํญ์ ๊ฐ๋ ์์, `SCalendarBoard` ๋ ํ์ด์ง ํญ์ ์ฑ์ฐ๋ ๋ธ๋ก์ด๋ค.
|
|
1400
|
+
- **`SCalendarBoard` ๋ ๊ธฐ๋ณธ์ด ์ฝ๊ธฐ ์ ์ฉ ํ์ด๋ค.** ๋ ์ง ์นธ์ ๋๋ฌ **๊ณ ๋ฅด๊ฒ** ํ๋ ค๋ฉด `selectable` ์ ์ผ ๋ค โ ์ผ์ผ `onValueChange(date, events)` ๋ก ๊ณ ๋ฅธ ๋ ์ง์ **๊ทธ ๋ ์ง์ ์ผ์ **์ด ํจ๊ป ์จ๋ค. ๋ค๋ง **์ผ์ ์ด ์๋ ์นธ์ `selectable` ๊ณผ ๋ฌด๊ดํ๊ฒ ๋๋ฆฐ๋ค** โ ๊ทธ๋๋ ๋ชฉ๋ก ํ์ด ์ด๋ฆฐ๋ค. ๋ ๋ค ์ผ์ ธ ์์ผ๋ฉด ๊ณ ๋ฅด๊ธฐ์ ์ด๊ธฐ๊ฐ ํจ๊ป ์ผ์ด๋๋ค. ์ผ์ ๋ฒํผ๊ณผ "N๊ฐ ๋๋ณด๊ธฐ" ๋ ํญ์ ๋๋ฆฐ๋ค.
|
|
1401
|
+
- **์นธ ๋ฐฐ๊ฒฝ๊ณผ ์ผ์ ์์ ๋ค๋ฅธ ์ธต์ด๋ค.** ๊ทธ๋ ์ ์ฑ๊ฒฉ(๋ง๊ฐยท์๋ฃยทํด๋ฌด ๋ฑ)์ `dayColors` ๋ก **์นธ ์ ์ฒด**์ ์น ํ๊ณ (`default` `danger` `accent` `complete` `dim`), ์ผ์ ํ๋์ ์์ `events[].color` ๋ก ์ค๋ค. ๋์ ์์ด ์ฐ๋ฉด ์๋ก๋ฅผ ๊ฐ๋ฆฌ์ง ์๊ณ ํจ๊ป ์ฝํ๋ค.
|
|
1402
|
+
- ์ผ์ ์ผ์ชฝ์ ์ ์ ์ `SBadge` ๋ค โ `events[].color` ํ๋ฆฌ์
์ด ์ ์๊น์ง ์ ํ๊ณ , ๋ฐ๋ก ์ฃผ๋ ค๋ฉด `dotColor` ์ `SBadge` 9์ ์ค ํ๋๋ฅผ ๋ฃ๋๋ค (ยง3-1).
|
|
1403
|
+
- **์นธ ๋ณธ๋ฌธ์ ํต์งธ๋ก ๋ฐ๊พธ๋ ค๋ฉด `dayContent` ๋ค.** ์ผ์ ์ผ๋ก ํํ๋์ง ์๋ ๊ทธ๋ ์น ์์ฝ(์ฌ๊ณ ยท๋งค์ถ ๊ฐ์)์ ์นธ์ ์น์ ๋ ์ด๋ค. **์ฌ๋กฏ์ ์ค ๋ ์ง๋ ๊ทธ ๋ ์ง์ `events` ๋ฅผ ๊ทธ๋ฆฌ์ง ์๊ณ ๋ชฉ๋ก ํ๋ ์ด์ง ์๋๋ค** โ ํ ์นธ์ ๋์ ๊ฒน์ณ ๋ด์ง ์๋๋ค. ์ผ์ ๊ณผ ์์ฝ์ ํจ๊ป ๋ณด์ฌ์ผ ํ๋ฉด ์์ฝ์ ์ผ์ ํ ๊ฑด(`events[]`)์ผ๋ก ๋ฃ๋๋ค.
|
|
1404
|
+
- **`SCalendarBoard` ๋ ๋์ด๋ฅผ ๋ถ๋ชจ์๊ฒ์ ๋ฐ๋๋ค.** ํ์ด ๊ทธ ๋์ด๋ฅผ ๊ท ๋ฑํ๊ฒ ๋๋ ๊ฐ๊ณ , ์นธ ๋์ด๊ฐ ๋ค์ "ํ ์นธ์ ๋ช ์ค์ด ๋ณด์ผ์ง" ๋ฅผ ์ ํ๋ค. ๊ทธ๋์ **๋๋ ์๋ฆฌ์ ๋์ด๋ฅผ ์ค๋ค** โ ํ์ด์ง ๋ณธ๋ฌธ์ ๋จ์ ๋์ด๋ฅผ ์ฑ์ฐ๋ ค๋ฉด `SPage` ์์์ ์คํ์ `flex-1 min-h-0` ์ผ๋ก ๋๊ณ ํ์ `h-full` ์ ์ค๋ค. ๋์ด๋ฅผ ์ฃผ์ง ์์ผ๋ฉด ์นธ์ด ์ต์ ๋์ด๋ก ์ฃผ์ ์์ ํ๋ ์ค๋ง ๋ณด์ธ๋ค.
|
|
1405
|
+
- **ํ ์นธ์ ๋ช ์ค์ ํผ์น ์ง๋ ์ปดํฌ๋ํธ๊ฐ ์ฐ๋ค.** ์กฐ์ ํ๋ prop ์ด ์๋ค โ ์นธ ๋์ด์์ ๋์ค๋ ๊ฐ์ด๋ผ ๋ฐ๋ก ์ ํ ๊ฒ์ด ์๋๋ค. ์ค์ด ๋์น๋ฉด ๋ง์ง๋ง ํ ์ค์ "N๊ฐ ๋๋ณด๊ธฐ" ์ ๋ด์ฃผ๋ฏ๋ก **์ ํ๋ ์๋๋ ์นธ ๋์ด๊ฐ ๊ฐ๋ค.** **์๋น ์ฑ์ด `events` ๋ฅผ ๋ฏธ๋ฆฌ ์๋ผ ๋๊ธฐ์ง ์๋๋ค.** ์๋ผ ๋๊ธฐ๋ฉด "N๊ฐ ๋๋ณด๊ธฐ" ์ ์๊ฐ ์ค์ ๊ฑด์์ ์ด๊ธ๋๊ณ , ๋๋ฌ๋ ๋๋จธ์ง๊ฐ ๋์ค์ง ์๋๋ค.
|
|
1406
|
+
- **`events[].label` ์ ํ์๋ค** โ ์ผ์ ์ด ๋ฌด์์ธ์ง ์๋ฆฌ๋ ๋ถ๋ถ์ด๋ผ ๋น์ ๋์ง ์๋๋ค. ์ธ๋ผ์ธ HTML ์ ๋ฐ์ผ๋ฏ๋ก ๋ถ๋ถ ๊ฐ์กฐ๊ฐ ํ์ํ ๋๋ง ํ๊ทธ๋ฅผ ์ฐ๊ณ , ๋๋จธ์ง๋ `description`ยท`value` ๋ก ๋๋ ๋ด๋๋ค. ์นธ์ด ์ข์์ง๋ฉด `label`+`description` ์ด ํ ๋ฉ์ด๋ฆฌ๋ก ๋ง์ค์๋๊ณ `value` ๋ง ๋์ ์จ์ ํ ๋จ๋๋ค โ **๊ธ์กยท์๋์ ๋ฐ๋์ `value` ์ ๋ด๋๋ค.** `description` ์ ๋ฃ์ผ๋ฉด ์๋ฆฐ๋ค.
|
|
1075
1407
|
- `SDatePickerYearListbox`ยท`SDatePickerMonthListbox` ๋ `SDatePicker` ์ mode listbox ์กฐ๊ฐ๋ง ๋ผ์ด๋ธ ์ปดํฌ๋ํธ๋ค. ์ผ๋ฐ ํผ ์
๋ ฅ์๋ `SDatePicker mode="year" | "month"` ๋ฅผ ์ฐ์ ์ฐ๊ณ , ๋ค๋ฅธ ํธ๋ฆฌ๊ฑฐยทํ์ค๋ฒ ์์ ๋ฆฌ์คํธ๋ง ๋ผ์ ๋ฃ์ ๋๋ง ์ง์ ์ด๋ค.
|
|
1076
1408
|
|
|
1077
1409
|
**๋ ์งยท์๊ฐ ํผ์ปค๋ ํญ ์ํ์ ์ค์ค๋ก ๊ฐ๋๋ค โ `width` ๋ฅผ ์ฃผ์ง ์๋๋ค.** ๊ฐ ๊ธธ์ด๊ฐ `YYYY-MM-DD` ์ฒ๋ผ ์ ํด์ ธ ์์ด ์ปดํฌ๋ํธ๊ฐ ์ฌ์ด์ฆ๋ณ ์ํ์ ์๋ค. `SKeyValueTable` ์ด ๋ชจ๋ ์ปจํธ๋กค์ `width="100%"` ๋ฅผ ๋๊ธฐ์ง๋ง, ์ด ์ํ ๋๋ถ์ ํ ์ ์ฒด๋ก ๋์ด๋์ง ์๊ณ ์ ํญ์์ ๋ฉ์ถ๋ค.
|
|
@@ -1085,9 +1417,25 @@ const columns: STableColumn[] = [
|
|
|
1085
1417
|
|
|
1086
1418
|
`SDateRangePicker` ๊ฐ ํ ๋ฑ๊ธ์ฉ ์์ธ ๊ฒ์ ๊ฐ์ด `YYYY-MM-DD ~ YYYY-MM-DD` ๋ก ๋ ๋ฐฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ ์ด์ ๋ก `STimeRangePicker` ์ ์ค์ /์คํ ๋ชจ๋๋ sm ์์ ํ ๋ฑ๊ธ ์๋ฅผ ์ด๋ค โ ๊ทธ ๋ชจ๋์ ์ต์ ํญ์ด md ๋ฑ๊ธ์ ์ด๋ฏธ ๋์ด, ๊ทธ๋๋ก ๋๋ฉด ํํ์ด ์ํ์ ๋์ด ์ํ์ด ๋ฌด๋ ฅํด์ง๋ค.
|
|
1087
1419
|
|
|
1420
|
+
`SDatePicker` ๋ง ์ด ์ํ์ `maxWidth` ๋ก ๋ฎ์ ์ ์๋ค โ ๋ฑ๊ธ์ ์ฃผ๋ฉด ๊ทธ ๋ฑ๊ธ์ด ์ํ์ด ๋๊ณ , `width="100%" maxWidth="100%"` ๋ฉด ๋ถ๋ชจ ํญ์ ๊ทธ๋๋ก ์ฑ์ด๋ค. **ํญ์ด ์ด๋ฏธ ์ข๊ฒ ์ ํด์ง ์๋ฆฌ(ํ์ค๋ฒยท์ข์ ์นด๋)์์๋ง ์ด๋ค.** ํผยทํ ํ์์๋ ์ฐ์ง ์๋๋ค โ ๊ฑฐ๊ธฐ์ ์ํ์ ํ๋ฉด 4~10๊ธ์์ง๋ฆฌ ๊ฐ์ด ํ ์ ์ฒด๋ฅผ ์ฐจ์งํ๋ค.
|
|
1421
|
+
|
|
1422
|
+
##### ๊ฐ์ ์ง์ธ ์ ์๊ฒ ํ๋ ค๋ฉด `clearable`
|
|
1423
|
+
|
|
1424
|
+
`SSelect` ยท `SDatePicker` ยท `SDateRangePicker` ยท `STimePicker` ยท `STimeRangePicker` ๊ฐ ๊ฐ์ ๊ท์น์ผ๋ก ๊ฐ๋๋ค. ๊ฐ์ด ์์ ๋๋ง ์ง์ฐ๊ธฐ ๋ฒํผ์ด ๋ํ๋๊ณ , ๋๋ฅด๋ฉด **`onValueChange` ๋ก `null` ์ด ์จ๋ค** (๋น ๋ฌธ์์ด์ด ์๋๋ค). ๋ฐ๋ ์ชฝ ์ํ๋ `null` ์ ๋ด์ ์ ์์ด์ผ ํ๋ค.
|
|
1425
|
+
|
|
1426
|
+
```tsx
|
|
1427
|
+
const [from, setFrom] = useState<string | null>(null);
|
|
1428
|
+
|
|
1429
|
+
<SDatePicker label="์์์ผ" clearable value={from} onValueChange={setFrom} />;
|
|
1430
|
+
```
|
|
1431
|
+
|
|
1432
|
+
- **์กฐํ ์กฐ๊ฑด(ํํฐ)์๋ ์ผ ๋ค.** ํ ๋ฒ ๊ณ ๋ฅธ ๋ ์ง๋ฅผ ๋๋๋ฆด ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ ์ฒด ์กฐํ๋ก ๋์๊ฐ๋ ค๊ณ ์๋ก๊ณ ์นจํ๊ฒ ๋๋ค.
|
|
1433
|
+
- **ํ์ ์
๋ ฅ ํ๋์๋ ์ผ์ง ์๋๋ค.** ์ง์ฐ๋ฉด ๋ค์ ๊ณ ๋ฅด๊ธฐ ์ ๊น์ง ํผ์ด ํต๊ณผํ์ง ๋ชปํ๋ค โ ์ง์ธ ์ ์์ด์ผ ํ๋ ๊ฐ์ด๋ฉด ์ ์ด์ ํ์๊ฐ ์๋๋ค.
|
|
1434
|
+
- `disabled` ์ด๋ฉด ์ง์ฐ๊ธฐ ๋ฒํผ๋ ํจ๊ป ์ฌ๋ผ์ง๋ค. ๋ ํ๋๋ฅผ ์ง์ธ ์ ์์ผ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
1435
|
+
|
|
1088
1436
|
#### 3-7-5. SField ๋ฅผ ์ง์ ์ฐ๋ ๊ฒฝ์ฐ
|
|
1089
1437
|
|
|
1090
|
-
**๊ฑฐ์ ์๋ค.** `SInput`ยท`SNumberInput`ยท`STextarea`ยท`SSelect`ยท๋ ์ง/์๊ฐ ํผ์ปค๋ ์ด๋ฏธ ๋ด๋ถ์์ `SField` ๋ฅผ ์ฐ๊ณ ์์ด์ `label`ยท`required`ยท์๋ฌ ํ์๋ฅผ ์๊ธฐ prop ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ ์์ `SField` ๋ฅผ ํ ๊ฒน ๋ ๊ฐ์ธ๋ฉด ๋ผ๋ฒจ์ด ๋ ๋ฒ ๋์จ๋ค.
|
|
1438
|
+
**๊ฑฐ์ ์๋ค.** `SInput`ยท`SNumberInput`ยท`STextarea`ยท`SEditor`ยท`SSelect`ยท๋ ์ง/์๊ฐ ํผ์ปค๋ ์ด๋ฏธ ๋ด๋ถ์์ `SField` ๋ฅผ ์ฐ๊ณ ์์ด์ `label`ยท`required`ยท์๋ฌ ํ์๋ฅผ ์๊ธฐ prop ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ ์์ `SField` ๋ฅผ ํ ๊ฒน ๋ ๊ฐ์ธ๋ฉด ๋ผ๋ฒจ์ด ๋ ๋ฒ ๋์จ๋ค.
|
|
1091
1439
|
|
|
1092
1440
|
์ง์ ์ฐ๋ ๊ฒฝ์ฐ๋ ํ๋๋ฟ์ด๋ค โ **๋์์ธ ์์คํ
์ ์๋ ์ปจํธ๋กค**์ ๋ค๋ฅธ ํ๋์ ๋๊ฐ์ ๋ผ๋ฒจยทํ์ยท์๋ฌ ๋ชจ์์ ๋ถ์ผ ๋.
|
|
1093
1441
|
|
|
@@ -1100,15 +1448,17 @@ const columns: STableColumn[] = [
|
|
|
1100
1448
|
| **์์ ์์ฒด๊ฐ ๋ฐ์ดํฐ**๋ผ ์ฌ์ฉ์๊ฐ ๋์ด์ ๋ฐ๊พผ๋ค | `SDraggableList` + `SDraggableItem` |
|
|
1101
1449
|
|
|
1102
1450
|
- **ํญ๋ชฉ ํ๋์ ์์ฑ์ ๋์ดํ๋ ๊ฒ์ ๋ชฉ๋ก์ด ์๋๋ค.** `๋ผ๋ฒจ: ๊ฐ` ์ด ์ธ๋ก๋ก ์์ด๋ ๊ฒ์ `SKeyValueTable` ์ด๋ค (ยง4-4).
|
|
1103
|
-
- `SList` ๋ ๋ ์ด์์๋ง ๋ด๋นํ๋ค.
|
|
1104
|
-
-
|
|
1105
|
-
-
|
|
1451
|
+
- `SList` ๋ ๋ ์ด์์๋ง ๋ด๋นํ๋ค. depth ๋ณ ๋จ์ผ ํผ์นจ์ด ํ์ํ๋ฉด `SExpansionList` ๋ค (ยง3-7-7).
|
|
1452
|
+
- **`SList` ์ ์์์ `SListItem` ์ ๊ถ์ฅํ๋ค.** ๋ค๋ฅธ ์์๋ ๊ทธ๋๋ก ๋ ๋๋์ง๋ง, ํผ์น๋ ํญ๋ชฉ์ `SExpansionList` + `SExpansionItem` ์ด, ๋์ด์ ์์๋ฅผ ๋ฐ๊พธ๋ ํญ๋ชฉ์ `SDraggableList` + `SDraggableItem` ์ด ์ฌ๋ซํยท์ ๋ ฌ ๋์๊น์ง ํจ๊ป ๊ด๋ฆฌํ๋ฏ๋ก ๊ทธ์ชฝ์ ์ด๋ค (ยง3-7-7).
|
|
1453
|
+
- **ํญ๋ชฉ ์ฌ์ด ๊ตฌ๋ถ์ ์ ๋ฆฌ์คํธ๊ฐ ์์์ ๊ทธ๋ฆฐ๋ค.** `SListItem`ยท`SExpansionItem`ยท`SDraggableItem` ์
๋ค ์ค์ค๋ก ๊ตฌ๋ถ์ ์ ๊ทธ๋ฆฌ์ง ์๋๋ค. `SList`ยท`SExpansionList`ยท`SDraggableList` ๊ฐ ์์ **์ฌ์ด์** ๊ตฌ๋ถ์ ์ ๋ฃ์ผ๋ฏ๋ก ์์ดํ
์ `border-b` ๋ฅผ ์ง์ ๋ถ์ด์ง ์๊ณ , ์ผ๋ prop ๋ ๋ฐ๋ก ์๋ค. ๋ง์ง๋ง ํญ๋ชฉ ์๋์๋ ์ ์ด ๋จ์ง ์๋๋ค. ํ
๋๋ฆฌํ(`bordered`)์ ํ
๋๋ฆฌ๊ฐ ๊ตฌ๋ถ ์ญํ ์ ํ๋ฏ๋ก ๋ฆฌ์คํธ๊ฐ ๊ตฌ๋ถ์ ์ ๋นผ๊ณ , `gap` ์ผ๋ก ๋์ด๋ค โ `gap` ์ ์ค ๋ชฉ๋ก์๋ ๊ตฌ๋ถ์ ์ ๋ค์ด๊ฐ์ง ์๋๋ค.
|
|
1454
|
+
- **`SListItem` ์ ๊ธฐ๋ณธ์ด ํ์ ์ ์ฉ์ด๋ค.** ๋๋ฌ์ ์ด๋ยท์ ํํ๊ฒ ํ๋ ค๋ฉด `clickable` ์ ์ค๋ค โ hoverยท`selected`ยท`interaction="chevron"` ํํ์ด ์ ๋ถ ์ฌ๊ธฐ์ ๋ธ๋ ค ์์ด์, `clickable` ์์ด `selected` ๋ง ์ฃผ๋ฉด ์ ํ ํ์๊ฐ ๋์ค์ง ์๋๋ค. `SExpansionList` ๋ ์์ ์์ดํ
์ ์์์ ํด๋ฆญ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์ด ํจ์ ์ ๋ง์ ์ค๋ค โ ์ ํ ์ํ ์์ฒด๋ ์ฑ์ด ๋ ๋ค (ยง3-7-7).
|
|
1106
1455
|
|
|
1107
1456
|
```tsx
|
|
1108
|
-
โ
<SList
|
|
1109
|
-
โ
<SList
|
|
1457
|
+
โ
<SList><SListItem title="์ผ๋ฐ ๋ฌธ์" />โฆ</SList> {/* ์ค๋ก ๊ตฌ๋ถ๋๋ ๋ชฉ๋ก โ ๊ตฌ๋ถ์ ์ ์๋ */}
|
|
1458
|
+
โ
<SList gap><SListItem title="์ผ๋ฐ ๋ฌธ์" bordered />โฆ</SList> {/* ์นด๋์ฒ๋ผ ๋จ์ด์ง ๋ชฉ๋ก */}
|
|
1110
1459
|
โ
<SListItem title="์ผ๋ฐ ๋ฌธ์" clickable selected onClick={โฆ} /> {/* ๋๋ฌ์ ๊ณ ๋ฅด๋ ๋ชฉ๋ก */}
|
|
1111
|
-
โ <SList><SListItem title="์ผ๋ฐ ๋ฌธ์" className="border-b" />โฆ</SList>
|
|
1460
|
+
โ <SList><SListItem title="์ผ๋ฐ ๋ฌธ์" className="border-b" />โฆ</SList> {/* ๊ตฌ๋ถ์ ์ ์ง์ ๋ถ์ด์ง ์๋๋ค */}
|
|
1461
|
+
โ <SList><><SListItem title="์ผ๋ฐ ๋ฌธ์" /><SListItem title="๊ฒฐ์ ๋ฌธ์" /></></SList> {/* Fragment ๋ก ๋ฌถ์ผ๋ฉด ๊ทธ ์์ชฝ์ ๊ตฌ๋ถ๋์ง ์๋๋ค */}
|
|
1112
1462
|
โ <SListItem title="์ผ๋ฐ ๋ฌธ์" selected /> {/* clickable ์์ผ๋ฉด ์ ํ ํ์๊ฐ ์ ๋์จ๋ค */}
|
|
1113
1463
|
```
|
|
1114
1464
|
|
|
@@ -1120,7 +1470,30 @@ const columns: STableColumn[] = [
|
|
|
1120
1470
|
| **ํ ๋ฒ์ ํ๋๋ง** ์ด๋ ค์ผ ํ๋ค (์์ฝ๋์ธ) | `SExpansionList` + `SExpansionItem` |
|
|
1121
1471
|
| **๋ถ๋ชจ-์์ ๊ณ์ธต ์์ฒด**๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค (2๋จ ์ด์, ์ฐ๊ฒฐ์ ) | `STree` |
|
|
1122
1472
|
|
|
1123
|
-
`SExpansionList` ๋ depth ๋ณ
|
|
1473
|
+
`SExpansionList` ๋ depth ๋ณ **๋จ์ผ ํ์ฅ**์ ๊ด๋ฆฌํ๋ wrapper ๋ค. ์ง์ `useState` ๋ก "์ด๋ฆฐ ํญ๋ชฉ ํ๋"๋ฅผ ๋ค๊ณ ์์ง ์๋๋ค. ํญ๋ชฉ ์ฌ์ด ๊ตฌ๋ถ์ ์ ์ฌ๊ธฐ์๋ ๋ฆฌ์คํธ๊ฐ ์์์ ๊ทธ๋ฆฐ๋ค โ ๋ฐ๋ก ์ค prop ์ด ์๋ค (ยง3-7-6).
|
|
1474
|
+
|
|
1475
|
+
##### ํผ์นจ โ ์ ํ
|
|
1476
|
+
|
|
1477
|
+
**ํผ์นจ์ ๋ฆฌ์คํธ๊ฐ ๊ด๋ฆฌํ๊ณ , ์ ํ์ ์ฑ์ด ๊ด๋ฆฌํ๋ค.**
|
|
1478
|
+
|
|
1479
|
+
ํผ์นจ์ ํ๋ฉด ๋ฐ์ ์ง์ค์ด ์๋ ์๊ฐ UI ์ํ๋ค. ๊ฐ ํญ๋ชฉ์ด ์๊ธฐ `expanded` ๋ฅผ ๋ค๊ณ ์์ผ๋ฉด "ํ๋๋ง ์ด๋ฆผ"์ ๋ง๋ค ์ ์์ด ๋๊ตฐ๊ฐ ๋๋จธ์ง๋ฅผ ๋ซ์์ผ ํ๊ณ , ๊ทธ๊ฒ์ด ์ด wrapper ๋ค.
|
|
1480
|
+
|
|
1481
|
+
์ ํ์ ๋ค๋ฅด๋ค. ์ฑ์ด `selectedId` ์ค์นผ๋ผ ํ๋๋ฅผ ๋ค๋ฉด ์ํธ๋ฐฐ์ ๊ฐ ๊ตฌ์กฐ์ ์ผ๋ก ๋ณด์ฅ๋๊ณ , ๊ทธ ๊ฐ์ URLยทstore ๋ก ๋ณต์๋ผ์ผ ํ๋ค. ๋ฆฌ์คํธ๊ฐ ์ฌ๋ณธ์ ๋ค๋ฉด ๊ทธ ์๊ฐ ์ง์ค์ด ๋์ด ๋์ด ์ด๊ธ๋๋ค.
|
|
1482
|
+
|
|
1483
|
+
```tsx
|
|
1484
|
+
const [selectedId, setSelectedId] = useState<string>();
|
|
1485
|
+
|
|
1486
|
+
<SExpansionList>
|
|
1487
|
+
{/* ํ์๊ฐ ์๋ ํญ๋ชฉ(์ ์ฒดยท๋ฏธ๋ถ๋ฅ)์ SExpansionItem ์ด ์๋๋ผ SListItem ์ด๋ค */}
|
|
1488
|
+
<SListItem title="์ ์ฒด" selected={selectedId === 'all'} onClick={() => setSelectedId('all')} />
|
|
1489
|
+
<SExpansionItem title="์กฐ์ง">
|
|
1490
|
+
<SListItem title="์์
ํ" selected={selectedId === 'sales'} onClick={() => setSelectedId('sales')} />
|
|
1491
|
+
</SExpansionItem>
|
|
1492
|
+
</SExpansionList>
|
|
1493
|
+
```
|
|
1494
|
+
|
|
1495
|
+
- `clickable` ์ ๋ฆฌ์คํธ๊ฐ ์์ `SListItem` ์ ๊ธฐ๋ณธ์ผ๋ก ์ผ ์ค๋ค โ `clickable` ์์ด `selected` ๋ง ์ฃผ๋ฉด ํ์๊ฐ ์ ๋์ค๋ ํจ์ (ยง3-7-6)์ ๋ง๋ ๊ฐ์ด๋ค.
|
|
1496
|
+
- **ํ์๋ฅผ ๊ฐ์ง์ง ์๋ ํญ๋ชฉ์ `SExpansionItem` ์ด ์๋๋ผ `SListItem`** ์ผ๋ก ๋๋ค. ํผ์น ๊ฒ์ด ์๋๋ฐ ํผ์นจ ํญ๋ชฉ์ผ๋ก ๋ง๋ค๋ฉด ํ์ดํ๋ง ๋จ๋๋ค.
|
|
1124
1497
|
|
|
1125
1498
|
#### 3-7-8. SCard vs SSectionHeaderCard
|
|
1126
1499
|
|
|
@@ -1133,6 +1506,22 @@ const columns: STableColumn[] = [
|
|
|
1133
1506
|
- **์นด๋ ์์ ์นด๋๋ฅผ ๊ฒน์น์ง ์๋๋ค.** ์น์
์์ ๋ ๋๋ ์ผ ํ๋ฉด `SDivider` ๋ก ๋๊ฑฐ๋(ยง3-6) ์น์
์ ๋๋ก ๋ถ๋ฆฌํ๋ค.
|
|
1134
1507
|
- ์์ชฝ ์ฌ๋ฐฑ์ `SSectionHeaderCard` ์ `padding` prop ์ผ๋ก ์ค๋ค โ `p-sd-*` ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค (ยง2-2).
|
|
1135
1508
|
|
|
1509
|
+
**์นด๋๊ฐ ์๊ธฐ ์์์ ํ์ ํ๋ ์ก์
์ ๊ฐ์ง๋ฉด ํ๋จ ๋ฒํผ์ `children` ์ ์ง์ ๋์ง ์๋๋ค.** ๋ ์นด๋ ๋ชจ๋ ๋ชจ๋ฌยท๋๋ก์ด์ ๊ฐ์ ํ๋จ ์ก์
์์ญ์ ๊ฐ๋๋ค โ ์ฃผ ์ก์
์ `button`, ๋ณด์กฐ ๋ฒํผ์ `footerLeft` ๋ก ๋๊ธด๋ค(ยง3-3-4 ์ ๊ฐ์ ๊ท์น). ๋ฐฐ๊ฒฝยท์๋จ ๊ตฌ๋ถ์ ยท์ข์ฐ ์ฌ๋ฐฑยท์๋ ๋ถ๋ฆฌ๊ฐ ์ปดํฌ๋ํธ ๊ท์น๋๋ก ์กํ๊ณ , ์ข์ฐ ๋์ด ํค๋ยท๋ณธ๋ฌธ๊ณผ ๋ง๋๋ค. `footerLeft` ๋ ์ฌ๋กฏ์ด๋ผ `SButton` ์ ์ง์ ๋ฐฐ์นํ๋ฉฐ `size="md"` ๋ฅผ ๋ช
์ํ๋ค(ยง3-5-2).
|
|
1510
|
+
|
|
1511
|
+
```tsx
|
|
1512
|
+
{/* ์น์
์์์ ๋ฐ๋ก ์์ ยท์ ์ฅํ๋ ์ธ๋ผ์ธ ํผ ์น์
(ยง4-4) */}
|
|
1513
|
+
<SSectionHeaderCard
|
|
1514
|
+
title="๋ฐฐ์ก์ง"
|
|
1515
|
+
marker
|
|
1516
|
+
footerLeft={<SButton color="neutral" outline size="md" label="์ทจ์" onClick={reset} />}
|
|
1517
|
+
button={{ label: '์ ์ฅ', onClick: save }}
|
|
1518
|
+
>
|
|
1519
|
+
<SKeyValueTable โฆ />
|
|
1520
|
+
</SSectionHeaderCard>
|
|
1521
|
+
```
|
|
1522
|
+
|
|
1523
|
+
**ํ์ด์ง ์ ์ฒด๋ฅผ ํ์ ํ๋ ์ก์
์ ์นด๋ ํธํฐ๊ฐ ์๋๋ผ ํ์ด์ง ํ๋จ์ ๋๋ค.** ์นด๋ ํธํฐ๋ **๊ทธ ์นด๋ ์์์ ๋ซํ๋ ์ก์
**์ ์๋ฆฌ๋ค โ ์ฌ๋ฌ ์น์
์ ํ ๋ฒ์ ์ ์ฅํ๋ ๋ฒํผ์ ๋ง์ง๋ง ์นด๋์ ํธํฐ์ ๋ฃ์ผ๋ฉด ๊ทธ ์นด๋์๋ง ๊ฑธ๋ฆฌ๋ ์ก์
์ผ๋ก ์ฝํ๋ค. ์ด๋๋ ยง4-4 ์ฒ๋ผ ์นด๋ ๋ฐ ํ๋จ ์ค์ ๋๋ค.
|
|
1524
|
+
|
|
1136
1525
|
#### 3-7-9. SLinearProgress vs SCircleProgress
|
|
1137
1526
|
|
|
1138
1527
|
| ํ๋ณ | ์ฌ์ฉ |
|
|
@@ -1157,8 +1546,11 @@ const columns: STableColumn[] = [
|
|
|
1157
1546
|
|
|
1158
1547
|
- **๊ธฐ๋ณธ์ `SKeyValueTable` ์ด๋ค** (ยง4-2). ์กฐ๊ฑด์ด ๋์ฌ์ฏ ๊ฐ ์ดํ๋ก ๊ณ ์ ์ด๋ฉด ํ๋ก ํผ์ณ ๋๋ ํธ์ด ํ๋์ ์ฝํ๋ค.
|
|
1159
1548
|
- `SChipFilter` ๋ ์กฐ๊ฑด์ **์นฉ ํ ์ค**๋ก ์ ๊ณ , "ํํฐ ์ถ๊ฐ" ๋ก ํ์ํ ๊ฒ๋ง ๊บผ๋ด ์ฐ๊ฒ ํ๋ค. ์นฉ์ ๋๋ฅด๋ฉด ํธ์ง ํ์ค๋ฒ๊ฐ ์ด๋ฆฌ๊ณ , ๋ ์ง๋ ํ๋ฆฌ์
(์ค๋ยท์ง๋ 7์ผยท์ฌ์ฉ์ ์ง์ )์ผ๋ก ๊ณ ๋ฅธ๋ค. ์กฐ๊ฑด ํ๋ณด๊ฐ ๋ง์ ๋ชฉ๋ก ํ๋ฉด์์ ํํฐ๊ฐ ํ๋ฉด์ ์ธ๋ก๋ก ์ก์๋จน๋ ๊ฒ์ ๋ง๋ ์ฉ๋๋ค.
|
|
1160
|
-
- ๊ฒ์ ์คํ ์์ ์ด ๋ค๋ฅด๋ค โ `SKeyValueTable` ํํฐ๋ ์ฑ์ด ๊ฒ์ ๋ฒํผ์ ์ง์ ๋์ง๋ง, `SChipFilter` ๋ ํธ์ง ํ์ค๋ฒ๊ฐ ๋ซํ๊ฑฐ๋ "๊ฒ์" ์ ๋๋ฅผ ๋ `onSearch` ๊ฐ ๊ฐ ๋งต๊ณผ ํจ๊ป ํธ์ถ๋๋ค. ๊ฐ์ด ๋ฐ๋์ง ์์์ผ๋ฉด ํธ์ถ๋์ง ์๋๋ค.
|
|
1161
|
-
-
|
|
1549
|
+
- ๊ฒ์ ์คํ ์์ ์ด ๋ค๋ฅด๋ค โ `SKeyValueTable` ํํฐ๋ ์ฑ์ด ๊ฒ์ ๋ฒํผ์ ์ง์ ๋์ง๋ง, `SChipFilter` ๋ ํธ์ง ํ์ค๋ฒ๊ฐ ๋ซํ๊ฑฐ๋ "๊ฒ์" ์ ๋๋ฅผ ๋ `onSearch` ๊ฐ ๊ฐ ๋งต๊ณผ ํจ๊ป ํธ์ถ๋๋ค. ๊ฐ์ด ๋ฐ๋์ง ์์์ผ๋ฉด ํธ์ถ๋์ง ์๋๋ค. **๋จ ๋ง์ดํธ ํ ์ฒซ ํธ์ถ์ ๊ฐ์ด ์ฒ์ ๊ทธ๋๋ก์ฌ๋ ๋๊ฐ๋ค** โ ๋ง์ดํธ ์ ์๋ ์กฐํํ์ง ์๋ ํ๋ฉด(๋ค์ด์ผ๋ก๊ทธ ๋ฑ)์์ ์กฐ๊ฑด์ ํ๋๋ ๋ฃ์ง ์๊ณ ๋๋ฅธ ์ฒซ "๊ฒ์" ์ด ๋งํ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ **๋ง์ดํธ ์ ์กฐํํ ์ง ๋ง์ง๋ ์ฑ์ด ์ ํ๋ค** โ `SChipFilter` ๋ ๋ง์ดํธ๋ง์ผ๋ก `onSearch` ๋ฅผ ๋ถ๋ฅด์ง ์๋๋ค.
|
|
1550
|
+
- **keyword ์นฉ์ ์
๋ ฅ์ฐฝ์ ๋จ์ ํ
์คํธ๊น์ง ์กฐํ์ ๋ฃ๋๋ค.** Enter ๋ก ๋ด์ง ์๊ณ ํ์ค๋ฒ๋ฅผ ๋ซ์๋(="๊ฒ์" ํด๋ฆญยท๋ฐ๊นฅ ํด๋ฆญยทEscยท๋ค๋ฅธ ์นฉ์ผ๋ก ์ ํ) ๊ทธ ํ
์คํธ๋ฅผ ํค์๋๋ก ํ์ ํ ๋ค ์กฐํํ๋ค. ์ฑ์ด ๋ฐ๋ก ํ์ ์ํฌ ์ผ์ ์๋ค.
|
|
1551
|
+
- **๋
ธ์ถํ ์นฉ์ ์ฑ์ด ๊ณ์ฐํ์ง ์๋๋ค.** ๋ฐ์ ๋์ด๋ ๊ฒ์ `fixed`ยท`required` ํ๋์ **`value` ์ ๊ฐ์ด ๋ค์ด ์๋ ํ๋**๋ค. ๋
ธ์ถ ๋ชฉ๋ก์ ๋ฐ์์ ๋๊ธฐ๋ prop ์ ์๋ค. ์ฟผ๋ฆฌ์คํธ๋งยท์๋ฒ ์ํ์์ ์กฐ๊ฑด์ ๋ณต์ํ๋ ๋ชฉ๋ก ํ๋ฉด๋ **`value` ๋ง ๋๊ธฐ๋ฉด ์นฉ์ด ํจ๊ป ์ด์๋๊ณ **, ๊ทธ ์กฐ๊ฑด์ ๋นผ๋ฉด ์นฉ๋ ํจ๊ป ๋น ์ง๋ค โ ์นฉ๊ณผ ์กฐํ ์กฐ๊ฑด์ด ์ด๊ธ๋ ์๋ฆฌ๊ฐ ์๋ค. "ํํฐ ์ถ๊ฐ" ๋ก ๊บผ๋ธ ํํฐ๋ ๊ฐ์ ๋ฃ๊ธฐ ์ ์๋ ์๋ฆฌ๋ฅผ ์งํค์ง๋ง, "๊ฒ์ ์ด๊ธฐํ" ๋ฅผ ๋๋ฅด๊ฑฐ๋ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ฉด ์ฌ๋ผ์ง๋ค. ๊ฑธ๋ฆฐ ์กฐ๊ฑด์ด ์์ผ๋ ๋ฌธ์ ๋์ง ์๋๋ค.
|
|
1552
|
+
- **`fixed`ยท`required` ์ด๋ฉด์ ํ๋ณด๊ฐ ํ๋๋ฟ์ธ `select`ยท`select-multi` ๋ ์๋์ผ๋ก ์ ํ๋๋ค.** ๊ณ ๋ฅผ ์ฌ์ง๊ฐ ์๋ ๋ชฉ๋ก์ด๋ผ ์ปดํฌ๋ํธ๊ฐ ๊ทธ ๊ฐ์ ์ฑ์ฐ๊ณ , ์ฌ์ฉ์๊ฐ ๊ณ ๋ฅด์ง ์์๋ `onValueChange` ๊ฐ ๊ทธ ๊ฐ๊ณผ ํจ๊ป ํธ์ถ๋๋ค โ ๋ง์ดํธ ์งํ๋ถํฐ ๊ทธ ์กฐ๊ฑด์ด ๊ฐ ๋งต์ ๋ค์ด ์๋ค๊ณ ๋ณด๊ณ ์กฐํ๋ฅผ ์ง ๋ค. ์ต์
์ด API ์๋ต์ด๋ผ ๋ฆ๊ฒ ๋์ฐฉํด๋ ๋์ฐฉํ ์์ ์ ์ฑ์์ง๋ฏ๋ก, ์ฑ์ด ๋ฐ๋ก ์ฑ์ ๋ฃ์ ํ์๊ฐ ์๋ค. ์ฌ์ฉ์๊ฐ ๊ทธ ๊ฐ์ ์ง์ฐ๋ฉด ๋ค์ ์ฑ์ฐ์ง ์๋๋ค. **๋บ ์ ์๋ ํํฐ๋ ํ๋ณด๊ฐ ํ๋์ฌ๋ ์ฑ์ฐ์ง ์๋๋ค** โ ์ฒ์์ ๋ฐ์ ์๋ ํํฐ๋ผ, ์ฑ์ฐ๋ฉด ๋ณด์ด์ง๋ ์ง์ธ ์๋ ์๋ ์กฐ๊ฑด์ด ๊ฒ์์ ๊ฑธ๋ฆฐ๋ค(`defaultValue` ๋ฅผ `fixed`ยท`required` ๋ก ์ ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ด์ ). ํ๋ณด๊ฐ ํ๋๋ฟ์ธ ์กฐ๊ฑด์ ๋ฐ๋์ ๊ฑธ์ด์ผ ํ๋ฉด ๊ทธ ํ๋๋ฅผ `fixed` ๋ `required` ๋ก ์ค๋ค.
|
|
1553
|
+
- **`fields` ๋ ํญ์ ๊ทธ๋ฃน ๋ฐฐ์ด์ด๋ค.** ๋ฌถ์ ๊ฒ์ด ์์ด๋ `[{ fields: [...] }]` ๋ก ํ ๊ฒน ๊ฐ์ผ๋ค. ํจ๊ป ๊ฑธ์ด์ผ ํ๋ ์กฐ๊ฑด(์: ๊ธฐ๊ฐ ์ค ํ๋๋ ํ์)์ด ์์ผ๋ฉด ๊ทธ ํ๋๋ค๋ง ๋ณ๋ ๊ทธ๋ฃน์ผ๋ก ๋ผ์ด `rule` ์ ์ค๋ค โ ๊ท์น์ ๋ชป ์ฑ์ด ๋์ ๊ฒฝ๊ณ ํดํ์ด ๋ ์๊ณ `onSearch` ๊ฐ ๋งํ๋ค. ๊ทธ๋ฃน ์ ๊ตฌ๋ถ์ ์ `divider` ๋ก ์ผ ๋ค. ๊ฒ์ฆ ๋จ์์ ๊ตฌ๋ถ์ ์ ๋ณ๊ฐ๋ผ, ๋ฌถ์ด์ ๊ฒ์ฆ๋ง ํ๊ณ ์ถ์ผ๋ฉด `divider` ๋ฅผ ์ฃผ์ง ์๋๋ค.
|
|
1162
1554
|
|
|
1163
1555
|
#### 3-7-12. ์ด๋ฏธ์ง โ SImage
|
|
1164
1556
|
|
|
@@ -1192,7 +1584,7 @@ const columns: STableColumn[] = [
|
|
|
1192
1584
|
### 4-1. ์ฑ ์
ธ (๋ชจ๋ ํ์ด์ง ๊ณตํต)
|
|
1193
1585
|
|
|
1194
1586
|
```tsx
|
|
1195
|
-
import { SLayout, SGnb, SPage, type SGnbMenuItem, type SPageHeaderProps } from 'sellmate-design-system-react';
|
|
1587
|
+
import { SLayout, SGnb, SPage, SPageHeader, type SGnbMenuItem, type SPageHeaderProps } from 'sellmate-design-system-react';
|
|
1196
1588
|
|
|
1197
1589
|
const MENU: SGnbMenuItem[] = [
|
|
1198
1590
|
{ label: '์ฃผ๋ฌธ', value: 'orders', icon: 'bill' },
|
|
@@ -1209,20 +1601,24 @@ export default function AppShell({
|
|
|
1209
1601
|
header?: SPageHeaderProps;
|
|
1210
1602
|
scrollEndSpacing?: boolean;
|
|
1211
1603
|
contentHeight?: SPageContentHeight;
|
|
1604
|
+
contentWidth?: SPageContentWidth;
|
|
1212
1605
|
}) {
|
|
1213
1606
|
return (
|
|
1214
1607
|
<SLayout type="box" header="fix">
|
|
1215
1608
|
{/* type/header/folded ๋ SLayout ์๋ง ์ค๋ค โ SGnb ๋ context ์์ ์ฝ๋๋ค */}
|
|
1216
1609
|
<SGnb items={MENU} value={current} onValueChange={navigate} logo={<Logo />} />
|
|
1610
|
+
{/* ํ์ด์ง ์ ๋ชฉ์ SPage ์์ ํ์ ๋ก ๋๋ค โ SLayout ์ด ํค๋๋ถํฐ ๋ค๋ฅผ ํ ์ด๋ก ๋ฌถ๋๋ค.
|
|
1611
|
+
header ๋ ํ์ด์ง๋ง๋ค ๋ฌ๋ผ AppShell ์ด ๊ทธ๋๋ก ๋ฐ์ ๋๊ธด๋ค โ ์ฌ๊ธฐ์ ๋ง๋ค์ง ์๋๋ค */}
|
|
1612
|
+
{header && <SPageHeader {...header} />}
|
|
1217
1613
|
{/* ์ฝํ
์ธ ํจ๋ฉ์ SPage ๊ฐ ํ ํฐ์ผ๋ก ๋ฃ๋๋ค โ p-sd-* ๋ก ๋ฎ์ด์ฐ์ง ์๋๋ค */}
|
|
1218
|
-
{/*
|
|
1219
|
-
{/*
|
|
1220
|
-
{/*
|
|
1614
|
+
{/* ๋์ด ๋ชจ๋๋ ํ์ด์ง๊ฐ ์ ํ๋ค โ ๋๋ถ๋ถ contentHeight="fill" ์ด๋ค (ยง2-2) */}
|
|
1615
|
+
{/* ์คํฌ๋กค ๋ ์ฌ๋ฐฑ๋ SPage ๊ฐ ๋ฃ๋๋ค. ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋๋ ํ๋ฉด์์๋ง ์ผ ๋ค */}
|
|
1616
|
+
{/* ๊ฐ๋ก ํญ ๋ชจ๋๋ ํ์ด์ง๊ฐ ์ ํ๋ค โ ๋์ ์ฐฝ์์ ๋ณธ๋ฌธ์ ๋๋ฆด์ง ์ต์ ํญ์ผ๋ก ์ธ์ธ์ง */}
|
|
1221
1617
|
<SPage
|
|
1222
1618
|
background="frame"
|
|
1223
1619
|
scrollEndSpacing={scrollEndSpacing}
|
|
1224
1620
|
contentHeight={contentHeight}
|
|
1225
|
-
|
|
1621
|
+
contentWidth={contentWidth}
|
|
1226
1622
|
>
|
|
1227
1623
|
{children}
|
|
1228
1624
|
</SPage>
|
|
@@ -1231,20 +1627,44 @@ export default function AppShell({
|
|
|
1231
1627
|
}
|
|
1232
1628
|
```
|
|
1233
1629
|
|
|
1234
|
-
**ํ์ด์ง๋ `AppShell` ์ ์ง์ ํธ์ถํ๋ฉฐ ์๊ธฐ `header` ๋ฅผ ๋๊ธด๋ค** โ
|
|
1630
|
+
**ํ์ด์ง๋ `AppShell` ์ ์ง์ ํธ์ถํ๋ฉฐ ์๊ธฐ `header` ๋ฅผ ๋๊ธด๋ค** โ ์
ธ์ ์ฑ์ ํ๋๋ฟ์ด๋ฏ๋ก, ํ์ด์ง ์ ๋ชฉ์ด ํ์ด์ง๋ง๋ค ๋ค๋ฅด๋ค๋ ์ฌ์ค์ ์ด๋ ๊ฒ ํ๋ ์ ์ปดํฌ๋ํธ๋ฅผ ํตํด ํ๋ ค๋ณด๋ธ๋ค(ยง4-2ยทยง4-3ยทยง4-4 ์ฐธ๊ณ ).
|
|
1631
|
+
|
|
1632
|
+
**์์ ์์๋ `SGnb` โ `SPageHeader` โ `SPage` ๋ค.** `SLayout` ์ `SPageHeader` ์์์ ๋ณด๋ฉด **๊ทธ ์์๋ถํฐ ๋ค๋ฅผ** ํ๋์ ํ์ด์ง ์ด๋ก ๋ฌถ์ด ํค๋๋ฅผ ํ์ด์ง ์์ ๊ณ ์ ํ๋ค โ ์คํฌ๋กค๋ ํ์ด์ง ํจ๋ฉ๋ ๊ทธ ์๋ `SPage` ์์์๋ง ์ผ์ด๋๋ค. ๊ทธ๋์ ์์๊ฐ ๊ท์น์ด๋ค: ํค๋๋ฅผ `SGnb` ์์ ๋๋ฉด GNB ๊น์ง ํ์ด์ง ์ด๋ก ๋ธ๋ ค ๋ค์ด๊ฐ๊ณ , `SPage` ์ `children` ์์ ๋ฃ์ผ๋ฉด ๋ณธ๋ฌธ ํจ๋ฉ ์์ผ๋ก ๋ค์ด๊ฐ ์คํฌ๋กค๊ณผ ํจ๊ป ๋ฐ๋ ค ์ฌ๋ผ๊ฐ๋ค.
|
|
1633
|
+
|
|
1634
|
+
**`scrolled` ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.** plain ํค๋์ ๊ทธ๋ฆผ์๋ ๊ฐ์ ์ด์ `SPage` ๊ฐ ์ฌ๋ฆฐ ์คํฌ๋กค ์ํ๋ก ์ผ์ง๋ค โ ์์ผ๋ก ์ค ๊ฐ์ ๊ทธ ์๋ ๋์์ ๋ฎ์ด์จ ์คํฌ๋กค๊ณผ ์ด๊ธ๋ ๊ทธ๋ฆผ์๋ฅผ ๋จ๊ธด๋ค.
|
|
1235
1635
|
|
|
1236
|
-
**ํ์ด์ง ํค๋
|
|
1636
|
+
**ํ์ด์ง ํค๋ ์ฌ์ฉ ๊ท์น โ ์ด ์ฑ์์๋ ๊ฐ์ด ์๋๋ผ ๊ฐ์ ์ผ๊ด์ฑ์ด ๊ท์น์ด๋ค.**
|
|
1237
1637
|
|
|
1238
|
-
- **`
|
|
1638
|
+
- **`variant` ๋ ํ์์ด๊ณ , ์ฑ ์ ์ฒด์์ ํ๋๋ก ๊ณ ์ ํ๋ค.** ์ด๋ค ํ์ด์ง๋ `"bar"`(๋์ด ๊ณ ์ + ํ๋จ ๊ตฌ๋ถ์ ), ๋ค๋ฅธ ํ์ด์ง๋ `"plain"`(์ต์ ๋์ด) ๋ก ์์ด ์ฐ์ง ์๋๋ค. ํ๋ก์ ํธ์์ ํ๋๋ฅผ ๊ณ ๋ฅด๋ฉด(์: ์ ๋ถ `"bar"`) ๋ชจ๋ ํ์ด์ง ํค๋๊ฐ ๊ทธ ๊ฐ์ ์ด๋ค. **๊ธฐ๋ณธ๊ฐ์ด ์๋ ๊ฒ๋ ์ด ๊ท์น ๋๋ฌธ์ด๋ค** โ ๊ธฐ๋ณธ๊ฐ์ด ์์ผ๋ฉด ์ ์ค ํ์ด์ง๋ง ์กฐ์ฉํ ๋ค๋ฅธ ๋ชจ์์ด ๋์ด ๋ฉ๋ด๋ฅผ ์ฎ๊ธธ ๋๋ง๋ค ์ ๋ชฉ ์ค์ด ํ๋ค. ์
ธ์ ํ ๋ฒ ๊ฐ์ธ ์ฐ๋ฉด ์ง์ ํ๋ ์๋ฆฌ๋ `AppShell` ํ ๊ณณ์ด๋ค. `SLayout` ์ `header`(`"fix" | "full"`)์๋ ๋ค๋ฅธ ์ถ์ด๋ค โ ๊ทธ์ชฝ์ ์๋จ๋ฐ๊ฐ GNB ์ปฌ๋ผ ์์ ์๋์ง ํ๋ฉด ์ ํญ์ธ์ง๋ฅผ ์ ํ๋ค.
|
|
1239
1639
|
- **`slot`ยท`onBack` ๋ ํ์ด์ง ์ฑ๊ฒฉ์ด ์ค์ ๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์๋ ๋๋ก ํต์ผํ๋ค.** "๋ชฉ๋ก ํ์ด์ง์ ์๊ณ ์์ธยท๋ฑ๋ก ํ์ด์ง์ ์๋ค"์ฒ๋ผ ํ๋ฉด ์ข
๋ฅ์ ๋ฐ๋ผ ๊ฐ๋ฆฌ๋ ๊ฒ์ ํ์ฉ๋์ง๋ง, ๊ฐ์ ์ข
๋ฅ์ ํ๋ฉด๋ผ๋ฆฌ๋ ์์๋ก ๋ฃ์๋ค ๋บ๋ค ํ์ง ์๋๋ค.
|
|
1240
1640
|
- **`slot` ์ `ReactNode` ๋ฅผ ๊ทธ๋๋ก ๋ฐ์ง๋ง, ์์น์ `size="sm"` ๋ฒํผ ์์ฃผ๋ก๋ง ์ฑ์ด๋ค.** `STextLink`ยท๋ณต์กํ ์ปค์คํ
๋งํฌ์
์ ์ฌ๋กฏ์ ๋ฃ์ง ์๋๋ค โ ๊ทธ ์ด์์ด ํ์ํ๋ฉด ํ์ด์ง ํค๋๊ฐ ์๋๋ผ ยง4-2 ์ `STableBar` ์ฒ๋ผ ๋ณธ๋ฌธ ์ชฝ ์ก์
์๋ฆฌ๋ฅผ ์ด๋ค.
|
|
1241
1641
|
|
|
1642
|
+
**์
ธ ๋ฐ์ ๋จ๋
ํ๋ฉด(๋ก๊ทธ์ธยท์จ๋ณด๋ฉ ๋ฑ)์์๋ ๊ฐ์ ์ ๋ชฉ ์์ญ์ ์ธ ์ ์๋ค.** ์ด๋๋ ํ์ด์ง ์ด์ด ์์ผ๋ฏ๋ก `scrolled` ๊ฐ ์ฑ ๋ชซ์ด ๋๋ค.
|
|
1643
|
+
|
|
1644
|
+
```tsx
|
|
1645
|
+
import { SPageHeader } from 'sellmate-design-system-react';
|
|
1646
|
+
|
|
1647
|
+
const [scrolled, setScrolled] = useState(false);
|
|
1648
|
+
|
|
1649
|
+
{/* ํค๋๋ ์๊ธฐ ํฐ ๋ฉด์ ์ค์ค๋ก ์น ํ๋ค โ ๊ฐ์ธ๋ ์ชฝ์ ๋ณธ๋ฌธ์ด ๋์ผ ๋ฉด๋ง ์ ํ๋ฉด ๋๋ค */}
|
|
1650
|
+
<div className="flex h-full min-h-0 flex-col bg-[var(--sys-color-bg-frame)]">
|
|
1651
|
+
<SPageHeader variant="plain" title="์ํ ๋ชฉ๋ก" subText="ํ๋งค ์ค์ธ ์ํ์ ๊ด๋ฆฌํฉ๋๋ค." scrolled={scrolled} />
|
|
1652
|
+
{/* ์คํฌ๋กค์ ์ฑ์ด ์ฅ๋ฏ๋ก scrolled ๋ ์ฑ์ด ๋ฃ๋๋ค โ ํจ๋ฉ์ SPage ๊ฐ ์์ผ๋ ์ฌ๊ธฐ์ ์ค๋ค */}
|
|
1653
|
+
<div
|
|
1654
|
+
className="min-h-0 flex-1 overflow-auto p-sd-16"
|
|
1655
|
+
onScroll={e => setScrolled(e.currentTarget.scrollTop > 0)}
|
|
1656
|
+
>
|
|
1657
|
+
โฆ๋ณธ๋ฌธโฆ
|
|
1658
|
+
</div>
|
|
1659
|
+
</div>;
|
|
1660
|
+
```
|
|
1661
|
+
|
|
1242
1662
|
**GNB ํญ์ ์ฌ์ฉ์๊ฐ ์กฐ์ ํ๊ฒ ํ๋ ค๋ฉด `SGnb` ์ `resizable` ์ ์ค๋ค.** ๋ฉ๋ด ์ค๋ฅธ์ชฝ ๊ฒฝ๊ณ๊ฐ ์กฐ์ ์ ์ด ๋๊ณ , ๋ ์ผ ํญ์ ๊ณ ์ ๋ ์ฑ ๋ฉ๋ด ์ปฌ๋ผ๋ง ๋๊ณ ์ค๋ค. ๋ฒ์๋ ์ปดํฌ๋ํธ๊ฐ ์ ํ๋ฏ๋ก ์ซ์๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.
|
|
1243
1663
|
|
|
1244
1664
|
```tsx
|
|
1245
1665
|
{/* ํญ์ ๊ธฐ์ตํด์ผ ํ๋ฉด menuWidth ๋ฅผ ์ฑ์ด ์ฅ๊ณ onMenuWidthChange ๋ก ๋๋ฐ์ ์ ์ฅํ๋ค.
|
|
1246
1666
|
์ด๊ธฐ๊ฐ๋ง ์ ํ๋ฉด ๋๋ฉด defaultMenuWidth ํ๋๋ก ๋๋๋ค. */}
|
|
1247
|
-
<SGnb items={MENU} value={current} onValueChange={navigate} resizable defaultMenuWidth={
|
|
1667
|
+
<SGnb items={MENU} value={current} onValueChange={navigate} resizable defaultMenuWidth={220} />
|
|
1248
1668
|
```
|
|
1249
1669
|
|
|
1250
1670
|
`onMenuWidthChange` ๋ **๋๋๊ทธ๋ฅผ ๋๋ ์๊ฐ**(๋๋ ๋ฐฉํฅํค ์กฐ์) ํ ๋ฒ๋ง ์จ๋ค โ ์ ์ฅ ๋ก์ง์ ๊ทธ๋๋ก ๋ถ์ฌ๋ ํ๋ ์๋ง๋ค ์ฐ์ด์ง ์๋๋ค. ์ ํ ์๊ฑฐ๋ ๋ ์ผ ๋ฆฌํ๊ฐ ํ์ฑ์ด๋ผ ๊น ๋ฉ๋ด๊ฐ ์์ผ๋ฉด ์กฐ์ ์ ์ ๋์ค์ง ์๋๋ค.
|
|
@@ -1265,16 +1685,32 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1265
1685
|
|
|
1266
1686
|
**์ต์ ๋๋น๋ `SLayout` ์ด ๋ณด์ฅํ๋ค โ ์ฑ์ด `min-w-*` ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค.** ์ฐฝ์ด ์ต์ ๋๋น(`SLAYOUT_MIN_WIDTH`, GNB ํฌํจํ ์ ์ฒด ๊ธฐ์ค)๋ณด๋ค ์ข์์ง๋ฉด GNBยท์๋จ๋ฐ๋ ์ ์๋ฆฌ์ ๋จ๊ณ **`SPage` ์์๋ง ๊ฐ๋ก ์คํฌ๋กค์ด ์๊ธด๋ค.** ๋ฌธ์(๋ธ๋ผ์ฐ์ ์ฐฝ)์๋ ๊ฐ๋ก ์คํฌ๋กค์ด ์๊ธฐ์ง ์๋๋ค. ๊ทธ๋์ ์
ธ์ ๊ฐ์ธ๋ ์์์ `min-width` ๋ `overflow-x` ๋ฅผ ๊ฑธ์ง ์๋๋ค โ ๊ฑธ๋ฉด ์ฐฝ ์ ์ฒด๊ฐ ์คํฌ๋กค๋์ด GNB ๊ฐ ํ๋ฉด ๋ฐ์ผ๋ก ๋ฐ๋ฆฐ๋ค.
|
|
1267
1687
|
|
|
1268
|
-
|
|
1688
|
+
**์ฐฝ์ด ์ต์ ๋๋น๋ณด๋ค ๋์ ๋ ๋ณธ๋ฌธ์ ์ด๋ป๊ฒ ์ธ์ธ์ง๋ `SPage` ์ `contentWidth` ๊ฐ ์ ํ๋ค โ ํญ์ ์ง์ ๊ณ์ฐํ์ง ์๋๋ค.** ๋์ ๋ชจ๋ํฐ์์ ๋ณธ๋ฌธ์ด ๋๊น์ง ๋์ด๋ ์ฑ๊ธฐ์ด์ง๋ ํ๋ฉด์ด ์์ผ๋ฏ๋ก ์ธ ๊ฐ์ง ์ค ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค.
|
|
1689
|
+
|
|
1690
|
+
| `contentWidth` | ๋์ ์ฐฝ์์ | ์ฐ๋ ๊ณณ |
|
|
1691
|
+
| --- | --- | --- |
|
|
1692
|
+
| `"full"` (๊ธฐ๋ณธ) | ๋จ๋ ํญ์ ๋ณธ๋ฌธ์ด ๋ค ์ด๋ค | ํยท๋ชฉ๋ก์ฒ๋ผ ๊ฐ๋ก๋ฅผ ๋๊ฒ ์ธ์๋ก ์ ๋ณด๊ฐ ๋ ๋ค์ด๊ฐ๋ ํ๋ฉด |
|
|
1693
|
+
| `"fixed"` | ์ต์ ๋๋น์ผ ๋์ ๋ณธ๋ฌธ ํญ์ผ๋ก ๊ณ ์ , ์ผ์ชฝ ์ ๋ ฌ (๋จ๋ ํญ์ ์ค๋ฅธ์ชฝ) | ์์ ํญ ๊ทธ๋๋ก ์ธ์ฐ๋ ์ผ์ชฝ ๊ธฐ์ค์ ์ ์งํ ํ๋ฉด |
|
|
1694
|
+
| `"fixedCenter"` | ๊ฐ์ ํญ์ผ๋ก ๊ณ ์ , ๊ฐ์ด๋ฐ ์ ๋ ฌ (๋จ๋ ํญ์ ์ข์ฐ) | ํผยท์์ธ์ฒ๋ผ ๊ฐ๋ก๋ฅผ ๋๊ฒ ์จ๋ ์ป์ ๊ฒ์ด ์๋ ํ๋ฉด |
|
|
1695
|
+
|
|
1696
|
+
- **๊ณ ์ ํญ์ ์ซ์๋ฅผ ์ฐ์ง ์๋๋ค.** `max-w-*` ๋ `mx-auto` ๋ก ํ๋ด ๋ด๋ฉด GNB ํญยท์ ํ์ด ๋ฐ์๋์ง ์์ ์์๊ณผ ์ด๊ธ๋๋ค. ๊ณ ์ ํญ์ "์ฐฝ์ด ์ต์ ๋๋น์ผ ๋์ ๋ณธ๋ฌธ ํญ"์ด๊ณ `SPage` ๊ฐ GNB ์ํ๊น์ง ๋ฐ์ํด ๊ณ์ฐํ๋ค.
|
|
1697
|
+
- **์ฐฝ์ด ์ต์ ๋๋น๋ณด๋ค ์ข์์ง๋ฉด ์ธ ๋ชจ๋๊ฐ ๋ชจ๋ ๊ฐ๋ค** โ ๋จ๋ ํญ์ด ์์ผ๋ฏ๋ก ์ ๋ฌธ๋จ๋๋ก `SPage` ์์๋ง ๊ฐ๋ก ์คํฌ๋กค์ด ์๊ธด๋ค.
|
|
1698
|
+
- ๊ฐ์ ์ด์ `SPageHeader` ๋ ์๋์ผ๋ก ๊ฐ์ ํญยท์ ๋ ฌ์ ๋ฐ๋ฅธ๋ค โ ์ ๋ชฉ ์ค์ ๋ณ๋๋ก ์ฃผ์ง ์๋๋ค. ํค๋์ ํฐ ๋ฉดยท๊ตฌ๋ถ์ ์ ๋ ์ ํญ์ด๋ค.
|
|
1699
|
+
- **๊ฐ์ ์ข
๋ฅ์ ํ๋ฉด๋ผ๋ฆฌ๋ ๊ฐ์ ํต์ผํ๋ค** (ํค๋ `fix` ์ ๊ฐ์ ์ด์ ). ๋ชฉ๋ก ํ์ด์ง๋ง๋ค `full`ยท`fixedCenter` ๊ฐ ์์ด๋ฉด ๋ฉ๋ด๋ฅผ ์ฎ๊ธธ ๋๋ง๋ค ๋ณธ๋ฌธ ํญ์ด ํ๋ค.
|
|
1700
|
+
|
|
1701
|
+
**์
ธ์ `SPage` ๋ ๋ชจ๋ ํ์ด์ง๊ฐ ๊ณต์ ํ๋ฏ๋ก, ํ์ด์ง๋ง๋ค ๋ฌ๋ผ์ง๋ ๊ฒ์ ํ์ด์ง๊ฐ ์
ธ์ ์๋ ค์ผ ํ๋ค.** ์์ฒ๋ผ ํ๋ ์ ์ปดํฌ๋ํธ๊ฐ `contentHeight` ยท `scrollEndSpacing` ยท `contentWidth` ๋ฅผ ๋ฐ์ ๊ทธ๋๋ก ๋๊ธด๋ค.
|
|
1702
|
+
|
|
1703
|
+
**๋๋ถ๋ถ์ ํ์ด์ง๋ `contentHeight="fill"` ์ด๋ค** โ ๋ณธ๋ฌธ์ด ์ฐฝ์ ๊ฝ ์ฑ์ฐ๊ณ ์คํฌ๋กค์ ๊ฐ ์์ญ ์์์ ์ผ์ด๋๋ ๊ฒ์ด ํ์ค์ด๋ค(ยง2-2). ๋ธ๋ก์ ๋์ด๊ฐ ์ ํด์ ธ ์๊ณ ๊ทธ ๋์ด๊ฐ ์ฐฝ๋ณด๋ค ์ปค์ ํ์ด์ง ์์ฒด๊ฐ ์คํฌ๋กค๋ผ์ผ ํ๋ ํ๋ฉด์์๋ง `contentHeight="auto"`(๊ธฐ๋ณธ๊ฐ) + `scrollEndSpacing` ์ ์ผ ๋ค.
|
|
1269
1704
|
|
|
1270
1705
|
**์๋จ๋ฐ ๋ฐฐ์น๋ `header` ๊ฐ ์ ํ๋ค.** ์์ ์์๊ฐ ๋ฌ๋ผ์ง๋ฏ๋ก ์ฌ๋กฏ์ ์ฑ์ฐ๊ธฐ ์ ์ ์ด๋ ์ชฝ์ธ์ง๋ถํฐ ์ ํ๋ค.
|
|
1271
1706
|
|
|
1272
1707
|
| `header` | ์๋จ๋ฐ ๋ฐฐ์น | ๋ก๊ณ ํญ | `topContent` |
|
|
1273
1708
|
| --- | --- | --- | --- |
|
|
1274
1709
|
| `"fix"` (๊ธฐ๋ณธ) | `[๋ฐ์ฒ ยท ๋ก๊ณ โฆ ํด๋]` โ ์๋จ๋ฐ๊ฐ GNB ์ปฌ๋ผ ์์ ์๊ณ ํด๋๊ฐ ์ปฌ๋ผ ์ค๋ฅธ์ชฝ ๋ | ๋ด์ฉ ํญ | **๋ ๋๋์ง ์๋๋ค** (๋์ ์๋ฆฌ๊ฐ ์๋ค) |
|
|
1275
|
-
| `"full"` | `[๋ฐ์ฒ ยท ํด๋ ยท ๋ก๊ณ ยท topContent]` โ ์๋จ๋ฐ๊ฐ ํ๋ฉด
|
|
1710
|
+
| `"full"` | `[๋ฐ์ฒ ยท ํด๋ ยท ๋ก๊ณ ยท topContent โฆ system]` โ ์๋จ๋ฐ๊ฐ ํ๋ฉด ์ ํญ์ด๊ณ `system` ์ ์ค๋ฅธ์ชฝ ๋ | **140px ๊ณ ์ ** (๋ฐ์ฒ ์์ผ๋ฉด 172px) | ๋ก๊ณ ์ค๋ฅธ์ชฝ ๋จ๋ ํญ ์ ์ฒด |
|
|
1276
1711
|
|
|
1277
|
-
- `topContent` ๋ ์๋จ๋ฐ ๋ก๊ณ ์ค๋ฅธ์ชฝ ์ฌ๋กฏ์ด๋ค. ์ ์ญ
|
|
1712
|
+
- `topContent` ๋ ์๋จ๋ฐ ๋ก๊ณ ์ค๋ฅธ์ชฝ ์ฌ๋กฏ์ด๋ค. ์ ์ญ ๊ฒ์์ฒ๋ผ **๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ธ ๊ฒ๋ง** ๋ฃ๋๋ค. ํ์ด์ง๋ณ ์ก์
์ ์ฌ๊ธฐ๊ฐ ์๋๋ผ ยง4-2 ์ `STableBar` ๋ก ๊ฐ๋ค.
|
|
1713
|
+
- **๊ณ์ ยท์๋ฆผยท์ค์ ยท๋๋ฉ์ธยท์๋น์ค ์ ํ์ `topContent` ์ ์์ผ๋ก ๋ง๋ค์ง ์๋๋ค.** `header="full"` ์ด๋ฉด `system` ์ฌ๋กฏ์ ์กฐ๊ฐ๋ค์ด ์๋จ๋ฐ ์ค๋ฅธ์ชฝ ๋์ผ๋ก ์ฌ๋ผ์ค๋ฏ๋ก, ๊ทธ๊ฒ๋ค์ ์ ๋ถ `SGnbSystem` ์ด ๊ทธ๋ฆฐ๋ค (๋ฐ๋ก ์๋ ์ ).
|
|
1278
1714
|
- ์ฌ๋กฏ์ด ๋จ๋ ํญ์ ํต์งธ๋ก ๋ฐ์ผ๋ฏ๋ก **์ ๋ ฌ์ ์์์ ์ง์ ์ก๋๋ค** (์ข์ธก ์ ๋ ฌ + ์ฐ์ธก์ `ml-auto`).
|
|
1279
1715
|
- `header="full"` ์์ ๋ก๊ณ ์๋ฆฌ๋ 140px ๋ก ๊ณ ์ ๋๋ค โ ๋ก๊ณ ๋ด์ฉ์ด ๋ฐ๋์ด๋ `topContent` ์์์ ์ด ํ๋ค๋ฆฌ์ง ์๊ฒ ํ๊ธฐ ์ํจ์ด๋ค. ๋ก๊ณ ๊ฐ ๊ทธ๋ณด๋ค ๋์ผ๋ฉด ์๋ฆฌ๋ฏ๋ก ์ด ํญ์ ๋ง์ถฐ ์ค๋นํ๋ค.
|
|
1280
1716
|
- `onLauncherClick` ์ ์ฃผ์ง ์์ผ๋ฉด ๋ฐ์ฒ๊ฐ ๋ ๋๋์ง ์๊ณ , ๊ทธ ์๋ฆฌ(๋ฒํผ + ๊ฐ๊ฒฉ)๋ฅผ ๋ก๊ณ ์ฌ๋กฏ์ด ์ด์ด๋ฐ์ 172px ๊ฐ ๋๋ค. `topContent` ์์์ ์ ๋ฐ์ฒ ์ ๋ฌด์ ๊ด๊ณ์์ด ๊ฐ์ ์๋ฆฌ๋ค.
|
|
@@ -1285,26 +1721,28 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1285
1721
|
items={MENU} value={current} onValueChange={navigate}
|
|
1286
1722
|
logo={<Logo />}
|
|
1287
1723
|
topContent={
|
|
1288
|
-
/* ๋จ๋ ํญ ์ ์ฒด๋ฅผ ๋ฐ๋๋ค โ ์ผ์ชฝ์ ๊ทธ๋๋ก, ์ค๋ฅธ์ชฝ ๋์ ml-auto
|
|
1724
|
+
/* ๋จ๋ ํญ ์ ์ฒด๋ฅผ ๋ฐ๋๋ค โ ์ผ์ชฝ์ ๊ทธ๋๋ก, ์ค๋ฅธ์ชฝ ๋์ ml-auto.
|
|
1725
|
+
๊ณ์ ยท์๋ฆผ์ ์ฌ๊ธฐ ๋ง๋ค์ง ์๋๋ค โ system ์ฌ๋กฏ์ด ์๋จ๋ฐ ์ค๋ฅธ์ชฝ ๋์ ๊ทธ๋ฆฐ๋ค */
|
|
1289
1726
|
<div className="flex w-full items-center gap-sd-8">
|
|
1290
|
-
<
|
|
1291
|
-
<SButton size="sm" color="neutral" outline label="
|
|
1727
|
+
<SSearchInput value={keyword} onValueChange={setKeyword} onSearch={runSearch} placeholder="ํตํฉ ๊ฒ์" />
|
|
1728
|
+
<SButton size="sm" color="neutral" outline label="๋์๋ง" className="ml-auto" onClick={openHelp} />
|
|
1292
1729
|
</div>
|
|
1293
1730
|
}
|
|
1731
|
+
system={<SGnbSystem alert={{ count: unreadCount, onClick: openAlerts }} account={{ label: userName, listBox: accountPanel }} />}
|
|
1294
1732
|
/>
|
|
1295
1733
|
<SPage background="frame">{children}</SPage>
|
|
1296
1734
|
</SLayout>
|
|
1297
1735
|
```
|
|
1298
1736
|
|
|
1299
|
-
**๋ฉ๋ด ๋ชฉ๋ก๊ณผ ํจ๊ป ์คํฌ๋กค๋๋ฉด ์ ๋๋ ๊ฒ์ `SGnb` ์ ์์๋ ๊ณ ์ ์ฌ๋กฏ์ ๋๋ค.** ๋ ์ผ๊ณผ ๋ฉ๋ด์ ๊ฐ๊ฐ ์(`railTop`ยท`menuTop`)์ ์๋(`railFooter`ยท`menuFooter`) ์ฌ๋กฏ์ด ์๋ค. ์์ดํ
์ด ๋ง์ ๋์น๋ฉด **๋ชฉ๋ก๋ง ์คํฌ๋กค๋๊ณ ์ด ์ฌ๋กฏ๋ค์ ์ ์๋ฆฌ์ ๋จ๋๋ค** โ ๋ฉ๋ด ๊ฒ์, ์ํฌ์คํ์ด์ค ์ ํ, ๊ณ์ ํ์ฒ๋ผ ํญ์ ๋ณด์ฌ์ผ ํ๋ ๊ฒ์ด ์ฌ๊ธฐ ์จ๋ค. ๋ ์ผ ์ฌ๋กฏ์ `
|
|
1737
|
+
**๋ฉ๋ด ๋ชฉ๋ก๊ณผ ํจ๊ป ์คํฌ๋กค๋๋ฉด ์ ๋๋ ๊ฒ์ `SGnb` ์ ์์๋ ๊ณ ์ ์ฌ๋กฏ์ ๋๋ค.** ๋ ์ผ๊ณผ ๋ฉ๋ด์ ๊ฐ๊ฐ ์(`railTop`ยท`menuTop`)์ ์๋(`railFooter`ยท`menuFooter`) ์ฌ๋กฏ์ด ์๋ค. ์์ดํ
์ด ๋ง์ ๋์น๋ฉด **๋ชฉ๋ก๋ง ์คํฌ๋กค๋๊ณ ์ด ์ฌ๋กฏ๋ค์ ์ ์๋ฆฌ์ ๋จ๋๋ค** โ ๋ฉ๋ด ๊ฒ์, ์ํฌ์คํ์ด์ค ์ ํ, ๊ณ์ ํ์ฒ๋ผ ํญ์ ๋ณด์ฌ์ผ ํ๋ ๊ฒ์ด ์ฌ๊ธฐ ์จ๋ค. ๋ ์ผ ์ฌ๋กฏ์ `showRail` ์ผ ๋๋ง, ๋ฉ๋ด ์ฌ๋กฏ์ ๊น ๋ฉ๋ด๊ฐ ์์ ๋๋ง ๋ ๋๋๋ค.
|
|
1300
1738
|
|
|
1301
1739
|
**์ ์ผ๋ฉด ๋ ์ผยท๋ฉ๋ด๊ฐ ํต์งธ๋ก ๋น ์ ธ๋๊ฐ๋ฉด์ ๊ทธ ์ฌ๋กฏ๋ค๋ ํจ๊ป ์ฌ๋ผ์ง๋ค.** ์ ํ ์ํ์์๋ ๋จ๊ฒจ์ผ ํ ๊ฒ์ `foldedTop`ยท`foldedFooter` ๋ก ๋ฐ๋ก ์ค๋ค โ `header="fix"` ๋ก ์ ํ์ ๋๋ง ๋ํ๋๋ฉฐ, ํญ์ด ์ข์ ํด๋ ๋ ์ผ์ด๋ฏ๋ก ์์ด์ฝ ๋ฒํผ ํ๋ ์ ๋๋ก ์ค์ธ๋ค.
|
|
1302
1740
|
|
|
1303
1741
|
```tsx
|
|
1304
1742
|
{/* ์ ํ๋ฉด menuTopยทmenuFooter ๊ฐ ํจ๊ป ๋น ์ง๋ฏ๋ก, ํด๋ ๋ ์ผ์ ๋จ๊ธธ ๊ฒ๋ง foldedTop ์ผ๋ก ๋ฐ๋ก ์ค๋ค */}
|
|
1305
1743
|
<SGnb
|
|
1306
|
-
items={MENU} value={current} onValueChange={navigate}
|
|
1307
|
-
menuTop={<
|
|
1744
|
+
items={MENU} value={current} onValueChange={navigate} showRail
|
|
1745
|
+
menuTop={<SSearchInput value={keyword} onValueChange={setKeyword} placeholder="๋ฉ๋ด ๊ฒ์" />}
|
|
1308
1746
|
menuFooter={<AccountRow />}
|
|
1309
1747
|
foldedTop={<SGhostButton icon="search" size="sm" ariaLabel="๋ฉ๋ด ๊ฒ์" onClick={openSearch} />}
|
|
1310
1748
|
/>
|
|
@@ -1312,6 +1750,62 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1312
1750
|
|
|
1313
1751
|
์ฌ๋กฏ ์์ชฝ ์ฌ๋ฐฑ์ **์ฌ๋กฏ ๋ด์ฉ์ด ์ง์ ๊ฐ๋๋ค** โ ์ปดํฌ๋ํธ๋ ์๋ฆฌ๋ง ์ก๋๋ค(ํด๋ ์ฌ๋กฏ๋ง ์ข์ ํญ์ ๋ง์ถฐ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๋ค). ๋ฉ๋ด ํญ์ `resizable` ๋ก ๋ฐ๋ ์ ์์ผ๋ฏ๋ก ์ฌ๋กฏ ๋ด์ฉ์ ๊ณ ์ ํญ ๋์ `w-full` ๋ก ๋ฐ๋ผ๊ฐ๊ฒ ๋๋ค.
|
|
1314
1752
|
|
|
1753
|
+
#### ์๋น์คยท๋๋ฉ์ธยท์๋ฆผยท์ค์ ยท๊ณ์ ๋ฌถ์ (system ์ฌ๋กฏ)
|
|
1754
|
+
|
|
1755
|
+
**์๋น์ค ์ ํยท๋๋ฉ์ธยท์๋ฆผยท์ค์ ยท๊ณ์ ์ฒ๋ผ "์ง๊ธ ์ด๋ค ์๊ฒฉ์ผ๋ก ๋ณด๊ณ ์๋๊ฐ" ๋ฅผ ๋ค๋ฃจ๋ ๋ฌถ์์ `SGnbSystem` ์ `SGnb` ์ `system` ์ฌ๋กฏ์ ๋ฃ๋๋ค.** ์ด ์กฐ๊ฐ๋ค์ `menuFooter` ๋ `topContent` ์ ์์ผ๋ก ์กฐ๋ฆฝํ์ง ์๋๋ค โ ๋ฐฐ๊ฒฝยท๊ฒฝ๊ณยท๊ตฌ๋ถ์ ยทํ ๊ฐ๊ฒฉ์ด ์ ๋ถ ํ ํฐ์ผ๋ก ์ ํด์ ธ ์์ด ์ง์ ๋ง๋ค๋ฉด ์ด๊ธ๋๋ค.
|
|
1756
|
+
|
|
1757
|
+
**๋์ด๋ ์๋ฆฌ๋ `header` ๊ฐ ์ ํ๋ค. ์ฑ์ด ๋๊ธฐ๋ ๊ฒ์ ์์ชฝ ๋ชจ๋ ๋๊ฐ๋ค.**
|
|
1758
|
+
|
|
1759
|
+
| `header` | system ์ด ์๋ ์๋ฆฌ | ํํ |
|
|
1760
|
+
| --- | --- | --- |
|
|
1761
|
+
| `"fix"` (๊ธฐ๋ณธ) | GNB ๋งจ ์๋ (์ ํ๋ฉด `foldedFooter` ์๋ ๋ ์ผ ๋ฐ๋ฅ) | ์ธ๋ก ํ โ ์์์๋ถํฐ `actions` ยท ๋๋ฉ์ธ ยท `[์๋ฆผ \| ์ค์ ]` ยท ๊ณ์ |
|
|
1762
|
+
| `"full"` | ์ ํญ ์๋จ๋ฐ **์ค๋ฅธ์ชฝ ๋** | ๊ฐ๋ก ํ ์ค โ `actions` \| ์๋ฆผ \| ์ค์ \| ๋๋ฉ์ธยท๊ณ์ |
|
|
1763
|
+
|
|
1764
|
+
`system` ์ ๋ค๋ฅธ ์ฌ๋กฏ๊ณผ ๋ฌ๋ฆฌ **ํผ์นจยท์ ํ ์์ชฝ์ ํผ์ ๋งก๋๋ค** โ `header="fix"` ๋ฉด ํผ์ณค์ ๋ ๋ฉ๋ด ์ปฌ๋ผ ๋ฐ๋ฅ์, ์ ํ์ ๋ ๋ ์ผ ๋ฐ๋ฅ์ ์ฌ๋ฐฑ ์์ด ๋ถ๋๋ค. ๊ทธ๋์ `menuFooter`/`foldedFooter` ๋ก ๋๋ ์ค ํ์๊ฐ ์๋ค.
|
|
1765
|
+
|
|
1766
|
+
```tsx
|
|
1767
|
+
<SGnb
|
|
1768
|
+
items={MENU} value={current} onValueChange={navigate} logo={<Logo />}
|
|
1769
|
+
system={
|
|
1770
|
+
<SGnbSystem
|
|
1771
|
+
/* ์๋จ์ ์๋ ํ โ SSystemActionButton ์ props ๋ฐฐ์ด์ด๋ค (ยง3-5).
|
|
1772
|
+
color ๋ ๋๊ธฐ์ง ์๊ณ , ๊ณ์ ํ์ ์ฌ๊ธฐ๊ฐ ์๋๋ผ ์๋ account ๋ก ์ค๋ค */
|
|
1773
|
+
actions={[{ type: 'select', label: '์๋น์ค ์ ํ', option: { icon: 'robot' }, onClick: openServices }]}
|
|
1774
|
+
domain={domainName}
|
|
1775
|
+
alert={{ count: unreadCount, onClick: openAlerts }}
|
|
1776
|
+
setting={{ onClick: openSettings }}
|
|
1777
|
+
/* ๊ณ์ ํ. listBox ๋ฅผ ์ฃผ๋ฉด ๋๋ ์ ๋ ๊ณ์ ํจ๋์ด ๋ฌ๋ค (ยง3-5-8) */
|
|
1778
|
+
account={{
|
|
1779
|
+
label: userName,
|
|
1780
|
+
listBox: {
|
|
1781
|
+
email: user.email, name: user.name, authority: user.authority,
|
|
1782
|
+
accountSetting: { onClick: openAccountSetting },
|
|
1783
|
+
language: { value: currentLanguage, onClick: openLanguage },
|
|
1784
|
+
logout: { onClick: signOut },
|
|
1785
|
+
},
|
|
1786
|
+
}}
|
|
1787
|
+
/>
|
|
1788
|
+
}
|
|
1789
|
+
/>
|
|
1790
|
+
```
|
|
1791
|
+
|
|
1792
|
+
- **`color`ยท`folded` ๋ฅผ ์ฃผ์ง ์๋๋ค.** `system` ์ฌ๋กฏ์ ์์ผ๋ฉด GNB ๊ฐ ์๊ธฐ ์๊ณผ ํํ๋ฅผ ๋ด๋ ค์ค๋ค. ์ด ๋์ GNB ๋ฐ์์ ๋จ๋
์ผ๋ก ์ธ ๋๋ง ์ค๋ค.
|
|
1793
|
+
- **๋์ด๋ ์๋ฆฌ๋ prop ์ด ์๋๋ค.** ์ธ๋ก ํ์ด๋ ์๋จ๋ฐ ํ ์ค์ด๋๋ GNB ์ `header` ๊ฐ ์ ํ๋ค(fix โ ํ, full โ ์๋จ๋ฐ). ๊ณ ๋ฅด๋ prop ์ ์์ผ๋ ์ฐพ์ง ์๋๋ค โ ์๋ฆฌ์ ์ด๊ธ๋ ํํ๋ฅผ ์ธ์ธ ์ด์ ๊ฐ ์๋ ํ๋ฉด์ด ์๋ค.
|
|
1794
|
+
- **๊ฐ ์กฐ๊ฐ์ ํด๋น prop ์ ์ค ๋๋ง ๋ํ๋๋ค โ ์ด๋ค ์กฐํฉ์ด์ด๋ ๊ทธ๊ฒ๋ง์ผ๋ก ํ์ด ์ฑ๋ฆฝํ๋ค.** ๊ณ์ ๋ง, ์๋ฆผ๋ง, ์ค์ ๋ง, ์๋ฆผ+๊ณ์ โฆ ์๋น์ค๊ฐ ์ฐ๋ ๊ฒ๋ง ๋๊ธด๋ค. ์กฐ๊ฐ์ ๋นผ๋ ค๊ณ ๋น ๋ฌธ์์ด์ด๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ฃ์ง ์๋๋ค(`setting={{}}` ์ "์ค์ ๋ฒํผ์ ์ด๋ค" ๋ ๋ป์ด๋ค).
|
|
1795
|
+
- ๊ตฌ๋ถ์ ์ **์์๋ ์์ชฝ์ ๋ด์ฉ์ด ์์ ๋๋ง** ๊ทธ์ด์ง๋ค โ `actions` ๋ง ๋๊ฒจ๋ ๋ฐ๋ฅ์ ๋ป ์๋ ์ ์ด ๋จ์ง ์๋๋ค.
|
|
1796
|
+
- ์๋ฆผยท์ค์ ์ **ํผ์ ์๋ฉด ํญ์ ๋ค ๋จน๊ณ **, ๋์ด ๋๋ํ ์๋ฉด ์๋ฆผ์ด ๋จ๋ ํญ์ยท์ค์ ์ด ์ ํญ์ ๊ฐ๋๋ค. ์ด๋ ์ชฝ์ด ๋น ์ ธ๋ ์ผ์ชฝ ๋์ ์์๋ ํ๊ณผ ๋ง์ผ๋ฏ๋ก ์ฑ์ด ์ ๋ ฌ์ ๋ง์ถ ์ผ์ด ์๋ค.
|
|
1797
|
+
- **์ผ์ง ์กฐ๊ฐ์ด ํ๋๋ ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋์ง ์๋๋ค.** ์กฐ๊ฑด๋ถ๋ก ์กฐ๊ฐ์ด ๋ค ๋น ์ง๋ ํ๋ฉด์์๋ GNB ๋ฐ๋ฅ์ ๋น ํ์ด ๋จ์ง ์๋๋ค.
|
|
1798
|
+
- **`header="fix"` ๋ฅผ ์ ์ผ๋ฉด ์๋ฆผยท๊ณ์ ์์ด์ฝ๋ง ๋จ๋๋ค** โ `actions`ยท`domain`ยท`setting` ์ 48px ํญ์ ๋์ ์๋ฆฌ๊ฐ ์์ด ๋ ๋๋์ง ์๊ณ , ์๋ฆผ ๊ฐ์๋ ์ ๋ฐฐ์ง๊ฐ ๋๋ค. **์๋ฆผ๋ ๊ณ์ ๋ ์ ์ฐ๋ ์กฐํฉ์ด๋ฉด ์ ํ ํจ๋์ ์์ ๋ ๋๋์ง ์๋๋ค** โ ์ ํ ์ํ์์๋ ๋ฐ๋์ ๋๋ฌ์ผ ํ๋ ๊ฒ์ด ๊ทธ ๋ ๋ฐ์ ์์ผ๋ฉด `foldedTop`/`foldedFooter` ๋ก ๋ฐ๋ก ์ค๋ค.
|
|
1799
|
+
- **`header="full"` ์ ์ ์ด๋ ์๋จ๋ฐ๊ฐ ๋จ์ผ๋ฏ๋ก ์กฐ๊ฐ๋ค๋ ๊ทธ๋๋ก ๋จ๋๋ค.** ๋์ ๊ฐ๋ก๋ก ์๋ฆฌ๊ฐ ๋๋ํ์ง ์์ ์๋ฆผยท์ค์ ์ด ๋ผ๋ฒจ์ ๋ฒ๊ณ ์์ด์ฝ(์๋ฆผ์ ๊ฐ์๊น์ง)๋ง ๋จ๋๋ค โ ์ด๊ฑด ์ปดํฌ๋ํธ๊ฐ ์์์ ํ๋ฏ๋ก ์ฑ์ด ๋ผ๋ฒจ์ ์ง์ฐ์ง ์๋๋ค.
|
|
1800
|
+
- **`account` ๋ฅผ ์ฐ๋ฉด `account.listBox` ๊ฐ ํ์๋ค** (ยง3-5-8) โ ๊ณ์ ํ์ ๋๋ฅด๋ฉด ์ด๋ฉ์ผยท์ด๋ฆยท๊ถํ๊ณผ ๊ณ์ ์ค์ ยท์ธ์ด ๋ณ๊ฒฝยท๋ก๊ทธ์์์ด ์์ธ ์์ด ๋ฌ๋ค. ๋จ๋ ๋ฐฉํฅ์ ํ์ด ๋์ธ ์๋ฆฌ๊ฐ ์ ํ๋ฏ๋ก ์ฑ์ด ๋๊ธฐ์ง ์๋๋ค โ ํ์ด๋ฉด ๊ณ์ ํ ์๋ก, ์๋จ๋ฐ๋ฉด ์๋๋ก ํผ์น๊ณ , ์ ํ ๋ ์ผ๋ ํ๊ณผ ๊ฐ๋ค. `account.onClick` ์ ํจ๋์ ์ฌ๋ ๊ฒ ๋ง๊ณ ๋ฐ๋ก ํ ์ผ(๋ก๊น
๋ฑ)์ด ์์ ๋๋ง ์ค๋ค.
|
|
1801
|
+
- **์๋ฆผ ๊ฐ์๋ `alert.count` ํ๋๋ก ํํํ๋ค.** 1 ์ด์์ด๋ฉด ๋ฒจ์ด ์ธ๋ฆฌ๋ ์์ด์ฝ๊ณผ ๊ฐ์กฐ์์ผ๋ก ๋ฐ๋๋ค โ ์์ GNB ์์ด ์ ํ๋ฏ๋ก ์ฑ์ด ์ง์ ์น ํ์ง ์๋๋ค. **`resizable` ๋ก ๋ฉ๋ด๋ฅผ ๊ธฐ๋ณธ ํญ๋ณด๋ค ์ข๊ฒ ์ค์ด๋ฉด ๊ฐ์๋ฅผ ์ ์ ๊ฐ๋ก๊ฐ ๋ชจ์๋ผ ์ ํ๊ณผ ๊ฐ์ ์ ๋ฐฐ์ง๋ก ๋ฐ๋๋ค** โ ์ปดํฌ๋ํธ๊ฐ ์์์ ํ๋ฏ๋ก ์ฑ์ด ํญ์ ๋ณด๊ณ `count` ๋ฅผ ์ง์ฐ์ง ์๋๋ค.
|
|
1802
|
+
- **์๋ฆผ์ ๋๋ฌ ๋จ๋ ๋ชฉ๋ก์ `alert.listBox` ์ ๋ด์ฉ๋ง ๋๊ธด๋ค** โ `SPortal` ์ ๋ฐ๋ก ๋์ ์๋ฆผ ๋ฒํผ์ ๋ถ์ด์ง ์๋๋ค. ๋ชฉ๋ก์ ๋ฌด์์ ์์์ง๋ ์๋น์ค๋ง๋ค ๋ค๋ฅด์ง๋ง **๋จ๋ ์๋ฆฌ๋ ๋ ๊ฐ์์ผ ํ๋ฏ๋ก**, ๋ฐฉํฅ(ํยท์ ํ ๋ ์ผ์ ๋ฒํผ ์ค๋ฅธ์ชฝ ยท ์๋จ๋ฐ๋ ์๋๋ก ์ค๋ฅธ์ชฝ ๋)๊ณผ ๋ฐ๊นฅ ํด๋ฆญยทESC ๋ซํ, ๋ฐฐ๊ฒฝยท๋ผ์ด๋ยท๊ทธ๋ฆผ์๋ ์ปดํฌ๋ํธ๊ฐ ์ฅ๋ค. ์ฌ๋ซ๋ ์ผ๋ ์๋ฆผ ๋ฒํผ์ด ํ๋ฏ๋ก **`onOpenChange` ๋ ๊ทธ ์ฌ์ค์ ์์์ผ ํ ๋๋ง** ๋ฐ๋๋ค(์ฐ ๊น์ ์ฝ์ ์ฒ๋ฆฌํ๋ ํ๋ฉด ๋ฑ) โ ์ด ๊ฐ์ผ๋ก ๋ชฉ๋ก์ ๋์ ์ด๊ฑฐ๋ ๋ง์ง ์๋๋ค. ๊ณ์ ํ(`account.listBox`)๊ณผ ๊ฐ์ ๊ท์น์ด๋ค.
|
|
1803
|
+
- **์๋ฆผ์ ์๋ด ํดํ์ ๋์ฐ๋ ค๋ฉด `alert.tooltip` ์ ๋ฌธ๊ตฌ๋ง ๋๊ธด๋ค** โ `STooltip` ์ ์ง์ ์ธ์ ์๋ฆผ ๋ฒํผ์ ๋ถ์ด์ง ์๋๋ค. ์(ํ์ด light ๋ฉด ๊ธฐ๋ณธ ยท ๊ทธ ๋ฐ์ ๊ฐ์กฐ)๊ณผ ๋ฐฉํฅ(ํยท์ ํ ๋ ์ผ์ ์ค๋ฅธ์ชฝ ยท ์๋จ๋ฐ๋ ์๋)์ ์๋ฆฌ๊ฐ ์ ํ๊ณ , ์ค์ค๋ก ์ฌ๋ผ์ง์ง ์๋ค๊ฐ **์๋ฆผ์ ๋๋ฅด๊ฑฐ๋ ๋ฒํผ์์ ์ปค์๋ฅผ ๋บ ๋** ๋ซํ๋ค.
|
|
1804
|
+
- **๋ซํ์ `onTooltipDismiss` ๋ก ๋ฐ์ `tooltip` ์ ๋น์ ๋๋ค.** ๊ฐ์ ๊ฐ์ ๊ณ์ ๋๊ธฐ๋ ๋์์๋ ๋ค์ ๋จ์ง ์๊ณ , **๋น์ ๋ค ๋ค์ ๋๊ธฐ๋ฉด ๋ฌธ๊ตฌ๊ฐ ๊ฐ์๋ ์ ์๋ด๋ก ๋ฌ๋ค** โ ์ ์๋ฆผ๋ง๋ค ๊ฐ์ ์๋ด๋ฅผ ๋ค์ ๋์ฐ๋ ํ๋ฉด์ด ๋งํ์ง ์๋๋ค.
|
|
1805
|
+
- ์ฌ๋
ธ์ถ ์ ํธ๋ ๋ฌธ๊ตฌ๊ฐ **์์ โ ์์** ์ผ๋ก ๋ฐ๋๋ ๊ฒ์ด๋ค. ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์์ ๋น์ ๋ค ๊ณง๋ฐ๋ก ๋ฃ์ผ๋ฉด ๋ ๋๊ฐ ํ ๋ฒ์ผ๋ก ๋ฌถ์ฌ ์ ํธ๊ฐ ๋์ง ์๋๋ค โ ๋ซ์ ๋ ๋น์ฐ๊ณ , ๋ค์ ํ์ํ ๋ ๋๊ธด๋ค.
|
|
1806
|
+
- ์ปดํฌ๋ํธ๊ฐ ์๋ ๋ฒ์๋ ๊ทธ ์๋ฆฌ๊ฐ ์ ์๋ ๋์๋ฟ์ด๋ค(์๋ก๊ณ ์นจํ๊ฑฐ๋ GNB ๋ฅผ ์ ์ด ์๋ฆผ์ด ๋ค๋ฅธ ์๋ฆฌ๋ก ์ฎ๊ฒจ ์๋ฉด ์๋ก ๋ง์ดํธ๋๋ค). **๊ทธ ์ฌ์ฉ์์๊ฒ ๋ ๋ฒ ๋ค์ ๋ณด์ด์ง ์์์ผ ํ๋ฉด ์ฑ์ด ๋ซํ์ ์ ์ฅํด ๋๊ณ `tooltip` ์ ๋๊ธฐ์ง ์๋๋ค.**
|
|
1807
|
+
- **`header="fix"` + `showRail` ์์ ํ์ ๋ฉ๋ด๊ฐ ์๋ ๋ ์ผ ์์ดํ
์ด ํ์ฑ์ด๋ฉด ๋ฉ๋ด ์ปฌ๋ผ์งธ ์ฌ๋ผ์ง๋ฏ๋ก ์ด ํจ๋๋ ํจ๊ป ๋น ์ง๋ค.** ํญ์ ๋ณด์ฌ์ผ ํ๋ ๊ณ์ ยท์๋ฆผ์ด๋ผ๋ฉด ๊ทธ๋ฐ ๋ ์ผ ๋ฆฌํ๋ฅผ ๋์ง ์๋๋ค โ ๋๋ `header="full"` ๋ก ๋๋ฉด ์๋จ๋ฐ์ ๋จ๋๋ค(๊ทธ๋ฐ ๋ ์ผ ๋ฆฌํ๊ฐ ์์ผ๋ฉด GNB ๊ฐ `header` ๋ฅผ `full` ๋ก ๊ฐ์ ํ๋ค).
|
|
1808
|
+
|
|
1315
1809
|
### 4-2. ๋ชฉ๋ก ํ์ด์ง (ํํฐ + ํ
์ด๋ธ)
|
|
1316
1810
|
|
|
1317
1811
|
๊ตฌ์กฐ: **ํ์ด์ง ํค๋(`AppShell` ์ `header` prop, ๊ฐ์ด๋ ๋ฑ ๋ถ๊ฐ ์ก์
์ slot) โ ํํฐ(`SKeyValueTable`) โ `STableBar` โ `STable`**
|
|
@@ -1323,9 +1817,10 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
1323
1817
|
- **ํ์ด์ง ์ ๋ชฉ ์ค์๋ ์ด ํ์ด์ง์ ์ฃผ์ ์ก์
์ ๋์ง ์๋๋ค.** ๋ถ๊ฐ์ ์ธ ๊ฒ๋ง `header.slot` ์ `SButton size="sm"` ์ผ๋ก ์จ๋ค (ยง4-1 "ํ์ด์ง ํค๋ ์ฌ์ฉ ๊ท์น").
|
|
1324
1818
|
- **์ฃผ์ ์ก์
(๋ฑ๋ก ๋ฑ)์ `STableBar` ์ `rightActions`** ์ ๋๋ค.
|
|
1325
1819
|
- **์ ํ ์ํ ์ก์
(์ ํ ์ญ์ ๋ฑ)์ `STableBar` ์ `actions`** ์ ๋๋ค. `actions` ์ฌ๋กฏ์ ๊ฑด์ ์์ฝ์ด ์์ผ๋ฉด ์์ ๊ตฌ๋ถ์ (`SDivider`)์ **์๋์ผ๋ก** ๋ฃ์ผ๋ฏ๋ก ์ง์ ๊ตฌ๋ถ์ ์ ๋ง๋ค์ง ์๋๋ค.
|
|
1326
|
-
-
|
|
1820
|
+
- **๋ณธ๋ฌธ์ด ๋จ์ ๋์ด๋ฅผ ์ฑ์ฐ๊ฒ ํ๋ค** โ `AppShell` ์ `contentHeight="fill"` ์ ๋๊ธด๋ค(ยง2-2 ํ์ค). ํ์ด์ง๊ฐ ํต์งธ๋ก ์คํฌ๋กค๋๋ฉด ํ์ด์ง๋ค์ด์
์ด ํ๋ฉด ๋ฐ์ผ๋ก ๋ฐ๋ ค "์ฌ๊ธฐ์ ๋"์ด ์ฝํ์ง ์๋๋ค. `fill` ์ด๋ฉด **ํ๋ง ์๊ธฐ ์์์ ์คํฌ๋กคํ๊ณ ํ์ด์ง๋ค์ด์
์ ํ๋จ์ ๊ณ ์ **๋๋ค.
|
|
1327
1821
|
- ๋ณธ๋ฌธ ๋ฃจํธ์ `h-full min-h-0` ์ผ๋ก ์ธ๋ก ์ถ์ ์๊ณ , ๋จ์ ๋์ด๋ฅผ ๋จน์ `STable` ์ `min-h-0 flex-1` ์ ์ค๋ค. ์ด ์ฌ์ฌ์ด ํ๋๋ผ๋ ๋๊ธฐ๋ฉด ํ๊ฐ ๋์ด๋ฅผ ๋ชป ์ก๋๋ค.
|
|
1328
1822
|
- `fill` ์์๋ ํ์ด์ง๊ฐ ์คํฌ๋กคํ์ง ์์ผ๋ฏ๋ก **`scrollEndSpacing` ์ ๋ฌด์๋๋ค** โ ๋ฐ๋ก ๋์ง ์๋๋ค (ยง2-2).
|
|
1823
|
+
- **์ ๋ ฌ ๊ฐ๋ฅํ ์ปฌ๋ผ์ `sortable` ๋ก ์ค๋ค.** ์ ๋ ฌ ์ํ(`sort`)๋ ์ด ํ์ด์ง๊ฐ ๋ค๊ณ `onSortChange` ๋ก ๋ฐ๋๋ค โ ์กฐํ ์กฐ๊ฑด์ด๋ผ URL ์ ์ค๋ ค์ผ ํ๋ค (ยง3-4).
|
|
1329
1824
|
|
|
1330
1825
|
```tsx
|
|
1331
1826
|
import {
|
|
@@ -1337,7 +1832,7 @@ import {
|
|
|
1337
1832
|
const filterFields: SKeyValueField[][] = [
|
|
1338
1833
|
[
|
|
1339
1834
|
{ name: 'status', label: '์ํ', type: 'select',
|
|
1340
|
-
options: { options: STATUS_OPTIONS,
|
|
1835
|
+
options: { options: STATUS_OPTIONS, valueAsPrimitive: true } },
|
|
1341
1836
|
{ name: 'keyword', label: '๊ฒ์์ด', type: 'input',
|
|
1342
1837
|
options: { placeholder: '์ํ๋ช
/ ์ํ์ฝ๋' } },
|
|
1343
1838
|
],
|
|
@@ -1369,6 +1864,7 @@ export default function ProductListPage() {
|
|
|
1369
1864
|
return (
|
|
1370
1865
|
<AppShell
|
|
1371
1866
|
header={{
|
|
1867
|
+
variant: 'bar',
|
|
1372
1868
|
title: '์ํ ๋ชฉ๋ก',
|
|
1373
1869
|
// ์ด ํ์ด์ง์ ์ฃผ์ ์ก์
์ด ์๋๋ผ ๋ถ๊ฐ ์ก์
โ slot ์ sm ๋ฒํผ์ผ๋ก๋ง ์ฑ์ด๋ค
|
|
1374
1870
|
slot: <SButton size="sm" color="neutral" outline label="์ด์ฉ ๊ฐ์ด๋" onClick={openGuide} />,
|
|
@@ -1411,7 +1907,7 @@ export default function ProductListPage() {
|
|
|
1411
1907
|
selected={selected}
|
|
1412
1908
|
onSelectedChange={setSelected}
|
|
1413
1909
|
pagination={{ currentPage, lastPage }}
|
|
1414
|
-
|
|
1910
|
+
loading={loading}
|
|
1415
1911
|
/>
|
|
1416
1912
|
</div>
|
|
1417
1913
|
</AppShell>
|
|
@@ -1419,6 +1915,33 @@ export default function ProductListPage() {
|
|
|
1419
1915
|
}
|
|
1420
1916
|
```
|
|
1421
1917
|
|
|
1918
|
+
#### ํ ํ๋ฉด์ ๋ ๋ง์ ํ์ โ `dense` ์ ๋ฐ๋ ํ ๊ธ
|
|
1919
|
+
|
|
1920
|
+
ํ ๋์ด๋ฅผ ์ค์ด๋ ๊ฒ์ `dense` ๋ค. ์ธ๋ก ์ฌ๋ฐฑ๋ง ์ค๊ณ ์ข์ฐ ํจ๋ฉ์ ๊ทธ๋๋ก๋ผ, ๊ฐ์ด ์๋ฆฌ์ง ์์ผ๋ฉด์ ํ ํ๋ฉด์ ๋ค์ด๊ฐ๋ ํ ์๊ฐ ๋์ด๋๋ค.
|
|
1921
|
+
|
|
1922
|
+
**์ด๋ ์ชฝ์ด ํธํ์ง๋ ํ๋ฉด์ด ์๋๋ผ ์ฌ์ฉ์๊ฐ ์๋ค.** ๊ทธ๋์ `dense` ๋ ๋ฐ๋๋ฅผ ๊ณ ์ ํ๋ ์ค์์น๊ฐ ์๋๋ผ **์์ ๋ฐ๋์ด์ ๋ฐ๋ ํ ๊ธ์ ์ค์์น**๋ค โ ์ผ๋ฉด ํ๋จ ๋ฐ ์ฐ์ธก(rows per page ์
๋ ํธ ์ผ์ชฝ)์ `์ข๊ฒ ๋ณด๊ธฐ` ยท `๋๊ฒ ๋ณด๊ธฐ` ๋งํฌ๊ฐ ๋ถ๋๋ค. ์ผ๊ณ ๋๋ ๋ณ๋ prop ์ ์๋ค.
|
|
1923
|
+
|
|
1924
|
+
```tsx
|
|
1925
|
+
// ์ข๊ฒ ์์ํ๊ณ , ์ฌ์ฉ์๊ฐ ๋ฐ๊พธ๋ ๋ฐ๋๋ ํ๊ฐ ์์์ ๋ค๊ณ ๊ฐ๋ค
|
|
1926
|
+
<STable dense showRowsPerPageSelect pagination={{ currentPage, lastPage }} />;
|
|
1927
|
+
|
|
1928
|
+
// ์ฌ์ฉ์๊ฐ ๊ณ ๋ฅธ ๋ฐ๋๋ฅผ ๋ค์ ๋ฐฉ๋ฌธ์๋ ๋จ๊ธฐ๋ ค๋ ํ๋ฉด๋ง ๋ฐ์์ ์ ์ฅํ๋ค.
|
|
1929
|
+
// ์ ์ฅํ ๊ฐ์ ์์ ๋ฐ๋๋ก๋ง ๋๋ ค์ค๋ค โ ๋๋๋ ค ๋ฃ์ง ์๋๋ค
|
|
1930
|
+
const [initialDense] = useState(() => loadPref('list.dense', true));
|
|
1931
|
+
|
|
1932
|
+
<STable
|
|
1933
|
+
dense={initialDense}
|
|
1934
|
+
onDenseChange={next => savePref('list.dense', next)}
|
|
1935
|
+
showRowsPerPageSelect
|
|
1936
|
+
pagination={{ currentPage, lastPage }}
|
|
1937
|
+
/>;
|
|
1938
|
+
```
|
|
1939
|
+
|
|
1940
|
+
- **๋๋ฅธ ๋ค์ ๋ฐ๋๋ `STable` ์ด ๋ด๋ถ ์ํ๋ก ๋ค๊ณ ๊ฐ๋ค.** `onDenseChange` ์์ด๋ ํ ๊ธ์ ๋์ํ๋ค. ์ ์ฅ์ด ํ์ํ ํ๋ฉด๋ง ๋ฐ์์ ์ ์ฅํ๋ฉด ๋๋ค.
|
|
1941
|
+
- **`dense` ์ `onDenseChange` ๊ฐ์ ๋๋๋ ค ๋ฃ์ง ์๋๋ค.** ํ ๊ธ์ ๋ถ์ผ์ง๋ ์ด prop ์ด ์ ํ๋ฏ๋ก, ๋๊ฒ ๋ณธ ์๊ฐ `dense` ๊ฐ `false` ๊ฐ ๋๋ฉด ํ ๊ธ์ด ์ฌ๋ผ์ ธ ๋ค์ ์ขํ ๊ธธ์ด ์๋ค. prop ๊ฐ์ ๋ฐ๊ฟ ๋๊ธฐ๋ ๊ฒ์ ์ธ๋ถ ๋ฒํผ ๋ฑ์ผ๋ก ๋ฐ๋๋ฅผ **๋๋๋ฆด ๋**๋ง ์ด๋ค โ ๋ด๋ถ ๋ฐ๋๊ฐ ๊ทธ ๊ฐ์ผ๋ก ๋ง์ถฐ์ง๋ค.
|
|
1942
|
+
- **`dense` ๋ฉด ํ์ด์ง๋ค์ด์
์ด ์์ด๋ ํ ๊ธ์ด ๋์จ๋ค** โ ํ๋จ ๋ฐ๋ฅผ ํ ๊ธ๋ง ๋ด์ ๊ทธ๋ฆฐ๋ค. `dense` ๊ฐ ์๋๋ฉด ํ ๊ธ๋ ์๋ค.
|
|
1943
|
+
- ๋ผ๋ฒจ๊ณผ ์์ด์ฝ์ ํ์ฌ ์ํ๊ฐ ์๋๋ผ **๋๋ฅด๋ฉด ๋๋ ์ํ**๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ข๊ฒ ๋ณด๊ณ ์์ผ๋ฉด `๋๊ฒ ๋ณด๊ธฐ` ๋ค.
|
|
1944
|
+
|
|
1422
1945
|
### 4-3. ํผ ํ์ด์ง (๋ฑ๋ก/์์ )
|
|
1423
1946
|
|
|
1424
1947
|
๊ตฌ์กฐ: **ํ์ด์ง ์ ๋ชฉ(`AppShell` ์ `header` prop) โ `SForm` + `SKeyValueTable` โ ํ๋จ ๋ฒํผ**
|
|
@@ -1426,6 +1949,19 @@ export default function ProductListPage() {
|
|
|
1426
1949
|
- ํ๋๋ฅผ `div` ๋ก ๋์ดํ์ง ์๊ณ **`SKeyValueTable` ์ ํ์ผ๋ก ๊ตฌ์ฑ**ํ๋ค.
|
|
1427
1950
|
- ๊ฒ์ฆ ๊ท์น์ ๊ฐ field ์ `options.rules` ๋ก ๋๊ธด๋ค. `SForm` ์ด ํ์ ์ปจํธ๋กค์ ์๋ ์์งํด submit ์ ์ผ๊ด ๊ฒ์ฆํ๊ณ , ์คํจ ์ ์ฒซ ์คํจ ํ๋๋ก ํฌ์ปค์ค๋ฅผ ์ฎ๊ธด๋ค.
|
|
1428
1951
|
- **๋ฒํผ ์์: ์ทจ์ยท๋ซ๊ธฐ๊ฐ ์ผ์ชฝ, ์ ์ฅยท๋ฑ๋กยท์์ ยท์ญ์ ๊ฐ ์ค๋ฅธ์ชฝ.** ์ด ์์๋ ๋ชจ๋ ํ๋ฉด์์ ๋์ผํ๋ค.
|
|
1952
|
+
- **ํผ ํ์ด์ง๋ `contentHeight="fill"` ์ด ๊ธฐ๋ณธ์ด๋ค**(ยง2-2). ํผ์ด ๊ธธ์ด ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋๋ ํ๋ฉด์์๋ง `auto` + `scrollEndSpacing` ์ ์ผ ๋ค.
|
|
1953
|
+
- **ํ๋ ํญ์ ๋ฑ๊ธ์ผ๋ก ์ค๋ค** โ `width="md"` ์ฒ๋ผ `'xs' | 'sm' | 'md' | 'lg' | 'xl'` ์ค ํ๋๋ค. px ๋ฅผ ์ง์ ์ ์ง ์๋๋ค. ๋ฑ๊ธ์ `maxLength`(= ์คํค๋ง ์ํ)๋ก ๊ณ ๋ฅด๊ณ , ์ํ์ด `xl` ์ ๋๊ฑฐ๋ ์ํ์ด ์์ผ๋ฉด `width="100%"` ๋ก ํ ์ ์ฒด๋ฅผ ์ด๋ค (ยง6 `field-width-grade`).
|
|
1954
|
+
|
|
1955
|
+
**`SKeyValueTable` ์ ์ ์ฒด ์ด ์๋ ๊ฐ์ฅ ๊ธด ํ์ด ์ ํ๋ค.** ์ด๋ค ํ์ด ๊ทธ๋ณด๋ค ์งง์ผ๋ฉด ๋จ๋ ์๋ฆฌ์ ์
์ด ์์ด ๊ทธ ๊ตฌ๊ฐ์ ํ ๊ตฌ๋ถ์ ์ด ๋๊ธด๋ค. ๋ง์ง๋ง ํ๋์ `tdColSpan` ์ ์ฃผ์ด ์ฑ์ด๋ค.
|
|
1956
|
+
|
|
1957
|
+
```tsx
|
|
1958
|
+
[
|
|
1959
|
+
[{ name: 'category', โฆ }, { name: 'price', โฆ }], // ํ๋ 2๊ฐ โ 4์นธ
|
|
1960
|
+
[{ name: 'memo', โฆ, tdColSpan: 3 }], // th(1) + td(3) = 4์นธ
|
|
1961
|
+
]
|
|
1962
|
+
```
|
|
1963
|
+
|
|
1964
|
+
**ํ ํ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋ค๋ฅธ ํ๋ค์ `tdColSpan` ๋ ํจ๊ป ๋ด์ผ ํ๋ค.** ์ ์ฒด ์ด ์๊ฐ ๋๋ฉด ๋๋จธ์ง ํ๋ค์ด ์กฐ์ฉํ ์งง์์ง๋ค โ ํ๋ฉด์์๋ง ๋๋ฌ๋๋ ์ปดํฌ๋ํธ ๊ณ ์ ๋์์ด๋ผ ์๋์ผ๋ก ์ฑ์ ์ฃผ์ง ์๋๋ค.
|
|
1429
1965
|
|
|
1430
1966
|
```tsx
|
|
1431
1967
|
import {
|
|
@@ -1444,7 +1980,7 @@ const fields: SKeyValueField[][] = [
|
|
|
1444
1980
|
],
|
|
1445
1981
|
[
|
|
1446
1982
|
{ name: 'category', label: '์นดํ
๊ณ ๋ฆฌ', required: true, type: 'select',
|
|
1447
|
-
options: { options: CATEGORY_OPTIONS,
|
|
1983
|
+
options: { options: CATEGORY_OPTIONS, valueAsPrimitive: true,
|
|
1448
1984
|
rules: [required('์นดํ
๊ณ ๋ฆฌ๋ฅผ ์ ํํด ์ฃผ์ธ์.')] } },
|
|
1449
1985
|
{ name: 'price', label: 'ํ๋งค๊ฐ', type: 'number-input' },
|
|
1450
1986
|
],
|
|
@@ -1459,9 +1995,9 @@ export default function ProductCreatePage() {
|
|
|
1459
1995
|
const [values, setValues] = useState<Record<string, unknown>>({});
|
|
1460
1996
|
|
|
1461
1997
|
return (
|
|
1462
|
-
<AppShell header={{ title: '์ํ ๋ฑ๋ก', onBack: goBack }}>
|
|
1998
|
+
<AppShell header={{ variant: 'bar', title: '์ํ ๋ฑ๋ก', onBack: goBack }}>
|
|
1463
1999
|
<div className="flex flex-col gap-sd-12">
|
|
1464
|
-
<SForm ref={formRef}
|
|
2000
|
+
<SForm ref={formRef} formClassName="flex flex-col gap-sd-12" onSubmit={save}>
|
|
1465
2001
|
<SKeyValueTable
|
|
1466
2002
|
fields={fields}
|
|
1467
2003
|
values={values}
|
|
@@ -1491,6 +2027,8 @@ export default function ProductCreatePage() {
|
|
|
1491
2027
|
- ํ์ด ๋ง์์ง๋ฉด **์ ํ๋ณ๋ก ์น์
์ ๋๋๊ณ , ๊ฐ ์น์
์ `SSectionHeaderCard` ๋ก ๊ฐ์ผ๋ค.**
|
|
1492
2028
|
์น์
์ ๋ชฉ์ `title` prop ์ผ๋ก, ๋ฐ๋ ์ฌ๋ฐฑ์ `padding` prop ์ผ๋ก ์ค๋ค.
|
|
1493
2029
|
- **์์ ยท์ญ์ ๋ฒํผ์ ํ๋จ์ ๋๋ค.** ๋ด์ฉ์ด ์งง์ ์ฐ์ธก ์๋จ์ ๋๋ ๋ณํ๋ ์์ผ๋ ๊ธฐ๋ณธ์ ํ๋จ์ด๋ค.
|
|
2030
|
+
- **์์ธ ํ์ด์ง๋ `contentHeight="fill"` ์ด ๊ธฐ๋ณธ์ด๋ค**(ยง2-2). ์น์
์ด ๋ง์ ํ์ด์ง๊ฐ ์ค์ ๋ก ์คํฌ๋กค๋๋ ํ๋ฉด์์๋ง `auto` + `scrollEndSpacing` ์ ์ผ ๋ค.
|
|
2031
|
+
- **์น์
๋ง๋ค ๋
๋ฆฝ ์ธ๋ผ์ธ ํผ์ด ์๋ ํํ**๋ ์์ธ ํ์ด์ง์ ๋ณํ์ด๋ค. ์น์
์์์ ๋ฐ๋ก ์์ ยท์ ์ฅํ๊ฒ ํ๋ ํ๋ฉด์ธ๋ฐ, ์ด๋ ๋ฒํผ ๊ฐ์กฐ๋ **์น์
๋จ์๊ฐ ์๋๋ผ ํ์ด์ง ๋จ์๋ก ํ๋จํ๋ค** โ ยง3-5-1 ์ "`secondary` ์ฐ์ ๋ฐฐ์น ๊ธ์ง"๋ ์น์
์ด ๋ค๋ฅด๋ฉด ์ ์ฉ๋์ง ์๋๋ค. ๊ทธ ์น์
์์์ ๋ซํ๋ ์ ์ฅยท์ทจ์๋ `SSectionHeaderCard` ์ `button`ยท`footerLeft` ๋ก ๋๊ธด๋ค (ยง3-7-8). ์๋ ์์ฒ๋ผ **ํ์ด์ง ์ ์ฒด๋ฅผ ํ์ ํ๋ ๋ฒํผ์ ์นด๋ ๋ฐ ํ๋จ ์ค**์ ๋๋ค โ ๋์ ์์ง ์๋๋ค.
|
|
1494
2032
|
|
|
1495
2033
|
```tsx
|
|
1496
2034
|
import {
|
|
@@ -1520,7 +2058,7 @@ const priceFields: SKeyValueField[][] = [
|
|
|
1520
2058
|
export default function ProductDetailPage() {
|
|
1521
2059
|
return (
|
|
1522
2060
|
// ๋ชฉ๋ก์์ ๋ค์ด์จ ์์ธ ํ์ด์ง โ onBack ์ผ๋ก ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ์ค๋ค
|
|
1523
|
-
<AppShell header={{
|
|
2061
|
+
<AppShell header={{ variant: 'bar', title: 'ํด๋์ ์
์ธ ', onBack: goList }}>
|
|
1524
2062
|
<div className="flex flex-col gap-sd-12">
|
|
1525
2063
|
<SSectionHeaderCard title="๊ธฐ๋ณธ ์ ๋ณด" marker thickness="accent">
|
|
1526
2064
|
<SKeyValueTable fields={basicFields} values={product} />
|
|
@@ -1567,6 +2105,29 @@ export default function ProductDetailPage() {
|
|
|
1567
2105
|
| Prop (Body) | ์ฉ๋ |
|
|
1568
2106
|
| --- | --- |
|
|
1569
2107
|
| `padding` | ์์ชฝ ์ฌ๋ฐฑ โ `'default'`(๊ธฐ๋ณธ) / `'wide'` / `'none'`. ํ์ ์ ยง2-2 "์น์
ยทํจ๋ ์์ชฝ ์ฌ๋ฐฑ". `p-sd-*` ๋ฅผ ์ง์ ์ฃผ์ง ์๋๋ค |
|
|
2108
|
+
| `background` | ๋ณธ๋ฌธ ๋ฐํ โ `'frame'`(๊ธฐ๋ณธ) / `'neutral'`. ํ์ ์ ยง2-2 "๋ณธ๋ฌธ ๋ฐํ ๋๋ฌ์ํ๊ธฐ" |
|
|
2109
|
+
|
|
2110
|
+
| Prop (Footer) | ์ฉ๋ |
|
|
2111
|
+
| --- | --- |
|
|
2112
|
+
| `button` | ํ๋จ ์ก์
์์ญ ์ฐ์ธก ์ฃผ ์ก์
(ยง3-7-8) |
|
|
2113
|
+
| `footerLeft` | ํ๋จ ์ก์
์์ญ ์ข์ธก ์ฌ๋กฏ โ ๋ณด์กฐ ๋ฒํผ. `SButton` ์ `size="md"` ๋ฅผ ๋ช
์ํ๋ค |
|
|
2114
|
+
|
|
2115
|
+
๋ ์ค ํ๋๋ผ๋ ์ฃผ๋ฉด ํ๋จ ์ก์
์์ญ์ด ๋ ๋๋๋ค. ํ์ ๋ฐํ + ์๋จ ๊ตฌ๋ถ์ ์ด๋ฉฐ ์ข์ฐ ๋์ ํค๋์ ๋ง๋๋ค โ ๋ฐฐ๊ฒฝยท์ฌ๋ฐฑ์ ์ง์ ์ฃผ์ง ์๋๋ค.
|
|
2116
|
+
|
|
2117
|
+
**ํ ํ์ด์ง์ ์น์
์นด๋๊ฐ ๋ ์ด์์ด๋ฉด `marker` ๋ฅผ ์ผ ๋ค.** ์ ์ ์น์
์ ์๋ก ๊ตฌ๋ถํ ๋์์ด ์ฌ๋ฟ์ผ ๋๋ง ์๋ฏธ๊ฐ ์์ด, ์นด๋๊ฐ ํ๋๋ฟ์ธ ํ์ด์ง์์๋ ์ผ์ง ์๋๋ค. ํ ํ์ด์ง ์์์๋ ์ผ๊ฑฐ๋ ๋๊ฑฐ๋ ์ ๋ถ ๊ฐ๊ฒ ๊ฐ๋ค.
|
|
2118
|
+
|
|
2119
|
+
**์น์
๋ณธ๋ฌธ์ด ์๊ธฐ ์์์ ์คํฌ๋กคํด์ผ ํ๋ฉด ๋ฃจํธ `className` ์ผ๋ก ๋ง์ง๋ง ์์์ ์ธ๋ก ์ถ์ ์๋๋ค.**
|
|
2120
|
+
|
|
2121
|
+
```tsx
|
|
2122
|
+
<SSectionHeaderCard
|
|
2123
|
+
title="โฆ"
|
|
2124
|
+
className="[&>div:last-child]:min-h-0 [&>div:last-child]:flex-1"
|
|
2125
|
+
>
|
|
2126
|
+
<STable className="min-h-0 flex-1" โฆ />
|
|
2127
|
+
</SSectionHeaderCard>
|
|
2128
|
+
```
|
|
2129
|
+
|
|
2130
|
+
๋ณธ๋ฌธ ๋ํผ๋ `className` ์ ๋ฐ์ง ์์ผ๋ฏ๋ก(์ฌ๋ฐฑ์ `padding` prop ์ผ๋ก๋ง ๋ฐ๋๋ค) ๋ฃจํธ์์ ๋ด๋ ค ์ค๋ค. **ํ๋จ ์ก์
์์ญ์ด ์์ผ๋ฉด ๋ณธ๋ฌธ์ด ๋ ์ด์ ๋ง์ง๋ง ์์์ด ์๋๋ค** โ ๊ทธ๋๋ `[&>div:nth-last-child(2)]` ๋ก ๊ฒจ๋๋ค. ํํ ๊ตฌ์ฑ์ ์๋๋ค โ ๋๋ถ๋ถ์ `STable` ์ด ์๊ธฐ ์์์ ์คํฌ๋กคํ๋ฏ๋ก ์ฌ๊ธฐ๊น์ง ๊ฐ ์ผ์ด ์๋ค.
|
|
1570
2131
|
|
|
1571
2132
|
---
|
|
1572
2133
|
|
|
@@ -1583,7 +2144,10 @@ export default function ProductDetailPage() {
|
|
|
1583
2144
|
- [ ] `SPage`ยท`SPopup` ์ ๊ธฐ๋ณธ ํจ๋ฉ์ `p-sd-*` ๋ก ๋ฎ์ด์ฐ์ง ์์๋๊ฐ, ๋ธ๋กยท์น์
**๊ฐ๊ฒฉ**์ด `gap-sd-12` ์ธ๊ฐ (`gap-sd-16`/`gap-sd-24` โ โ 24 ๋ ์์ชฝ ์ฌ๋ฐฑ์๋ง ์ด๋ฆฐ๋ค)
|
|
1584
2145
|
- [ ] ์น์
ยทํจ๋์ ์์ชฝ **์ฌ๋ฐฑ**์ด ยง2-2 ํ์ ๊ณผ ๋ง๋๊ฐ (๋ฉ์ด๋ฆฌ ๋ ์ข
๋ฅ โ 16 / ์ธ ์ข
๋ฅ ์ด์ โ 24, ์๋ฉด 16)
|
|
1585
2146
|
- [ ] `SSectionHeaderCard` ์ ์ฌ๋ฐฑ์ `p-sd-*` ๊ฐ ์๋๋ผ `padding` prop ์ผ๋ก ์คฌ๋๊ฐ
|
|
1586
|
-
- [ ]
|
|
2147
|
+
- [ ] ํ์ด์ง์ `contentHeight="fill"` ์ ๋๊ฒผ๋๊ฐ (ยง2-2 ํ์ค โ ํ์ด์ง ์คํฌ๋กค์ ์ฐ๋ ํ๋ฉด์์๋ง `auto` + `scrollEndSpacing`)
|
|
2148
|
+
- [ ] `fill` ์ ์ด ๋ธ๋ก์์ **์์๊น์ง `min-h-0 flex-1` ์ด ๋๊ธฐ์ง ์์๋๊ฐ** (ํ ๊ตฐ๋ฐ๋ง ๋๊ฒจ๋ ์์์ด ๋์ด๋ฅผ ๋ชป ์ก๋๋ฐ ์คํจ๊ฐ ์กฐ์ฉํ๋ค)
|
|
2149
|
+
- [ ] ์์ฒด ์คํฌ๋กคํ๋ ํจ๋์ ํ๋จ์ `pb-[var(--cmp-pageBody-padding-scrollEnd)]` ์ด ์๋๊ฐ
|
|
2150
|
+
- [ ] ํ ํ์ด์ง์ ์น์
์นด๋๊ฐ ๋ ์ด์์ด๋ฉด `marker` ๋ฅผ ์ผฐ๋๊ฐ, ํ๋๋ฟ์ด๋ฉด ๊ป๋๊ฐ (ยง4-5)
|
|
1587
2151
|
- [ ] ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋์ดํ ๋ ยง2-2 ๊ทธ๋ฃน ๊ฐ๊ฒฉ์ ์ผ๋๊ฐ (์ฒดํฌ๋ฐ์ค ๊ฐ๋ก `gap-sd-24` ๋ฑ)
|
|
1588
2152
|
- [ ] ํ์ด์ง๊ฐ ยง4์ ํ์ค ๊ณจ๊ฒฉ์์ ์์ํ๋๊ฐ
|
|
1589
2153
|
- [ ] `header.fix` ๊ฐ ํ๋ก์ ํธ ์ ์ฒด์ ๊ฐ์ ๊ฐ์ธ๊ฐ (๋ค๋ฅธ ํ์ด์ง์ ๋ค๋ฅด๊ฒ ์์ด ์ฐ์ง ์์๋๊ฐ, ยง4-1)
|
|
@@ -1592,11 +2156,20 @@ export default function ProductDetailPage() {
|
|
|
1592
2156
|
- [ ] ํํฐยทํผยท์์ธ ์ ๋ณด๋ฅผ `SKeyValueTable` ๋ก ๋ง๋ค์๋๊ฐ (์ปจํธ๋กค์ `div` ๋ก ๋์ดํ์ง ์์๋๊ฐ). ํํฐ๋ฅผ `SChipFilter` ๋ก ํ๋ค๋ฉด ยง3-7-11 ์ ํ์ ์ ๊ฑฐ์ณค๋๊ฐ
|
|
1593
2157
|
- [ ] ์น์
๊ตฌ๋ถ์ `SSectionHeaderCard` ๋ฅผ ์ผ๋๊ฐ (์ง์ ๋ง๋ ์นด๋๊ฐ ์๋๋ผ)
|
|
1594
2158
|
- [ ] ๋ชฉ๋ก์ ์ฃผ์ ์ก์
์ด `STableBar` ์ `rightActions` ์ ์๋๊ฐ (ํ์ด์ง ์ ๋ชฉ ์ค์ด ์๋๋ผ)
|
|
2159
|
+
- [ ] ๋ชฉ๋ก ํ์ด์ง ํ์ `dense` ๋ก ๋ฐ๋ ํ ๊ธ์ ๋์ ๋๊ฐ, ๊ทธ ๊ฐ์ `onDenseChange` ๊ฒฐ๊ณผ๋ก ๋๋๋ ค ๋ฃ์ง๋ ์์๋๊ฐ (ยง4-2 โ ๋๋๋ ค ๋ฃ์ผ๋ฉด ๋๊ฒ ๋ณธ ์๊ฐ ํ ๊ธ์ด ์ฌ๋ผ์ง๋ค)
|
|
1595
2160
|
- [ ] ์ํ ํ์์ `STag size="sm"` ์ ์ผ๋๊ฐ
|
|
1596
2161
|
- [ ] ํ
์ด๋ธ์์ ์์ ๋ํ๋ด๋ ์ปฌ๋ผ(๊ธ์กยท์๋ยท๊ฐ์ ๋ฑ)์ด ์ ๋ถ `align: 'right'` ์ธ๊ฐ
|
|
1597
2162
|
- [ ] ๋ฒํธยท์ฝ๋ยท์ ํ๋ฒํธยท์ผ์ ์ปฌ๋ผ์ `align: 'center'` ๋ฅผ **๋ช
์**ํ๋๊ฐ (์๋ตํ๋ฉด ์ข์ธก์ด ๋๋ค)
|
|
1598
|
-
- [ ]
|
|
2163
|
+
- [ ] ๋ซํ ๊ฐ ์งํฉ(enumยท๋ง์คํฐ ๋ชฉ๋ก์์ ๊ณ ๋ฅด๋ ๊ฐ) ์ปฌ๋ผ์ `align: 'center'` ๋ฅผ ์คฌ๋๊ฐ โ ํ๊ทธ๋ก ๊ทธ๋ ธ๋ ๋งจ ํ
์คํธ๋ก ๊ทธ๋ ธ๋ ๊ฐ๋ค (ยง3-4)
|
|
2164
|
+
- [ ] **๋ชจ๋ ์ปฌ๋ผ์ ํญ์ ๋ช
์**ํ๋๊ฐ, px ๋ก๋ง ์คฌ๋๊ฐ (`%`ยท`clamp()` โ), `autoWidth` ๋ ์คํ์ด์ ์ด ํ๋๋ฟ์ธ๊ฐ (ยง3-4)
|
|
2165
|
+
- [ ] ์ปจํธ๋กค(`STag`ยท`SButton`ยท`SSelect`ยท`SInput` โฆ)์ด ๋ค์ด๊ฐ๋ ์ปฌ๋ผ์ด `resizable` ์ด๋ฉด `minWidth` ๋ ์คฌ๋๊ฐ (ยง3-4 โ ํญ์ด ๋ชจ์๋ผ๋ฉด ์์๊ฐ ์๋ ค ๋ชป ์ด๋ค)
|
|
2166
|
+
- [ ] ์ ๋ ฌ ๊ฐ๋ฅํ ์ด์ `sortable` ์ ์คฌ๋๊ฐ (`renderHeader` ๋ก ์ง์ ๋ง๋ค์ง ์์๋๊ฐ), ์ ๋ ฌ ์ํ๋ฅผ ํ์ด์ง๊ฐ ๋ค๊ณ ์๋๊ฐ (ยง3-4)
|
|
2167
|
+
- [ ] `editable` ยท `navigable` ํ์์ ์ผ ์ด์ด **์
์์๋ ์ค์ ๋ก ๊ทธ๋ ๊ฒ ๋์ํ๋๊ฐ** (์
๋ ฅ ์ปจํธ๋กค ยท ๋งํฌ๊ฐ ์๋๊ฐ), ํ์์ ๋ถ์ธ ์ด์ ํญ์ ํจ๊ป ๋ํ๋๊ฐ (ยง3-4)
|
|
1599
2168
|
- [ ] ๊ธ์กยท์๋ ๋ฑ ์์ ๋ํ๋ด๋ ์ซ์์ ๋น ์ง์์ด `toLocaleString()` ์ ์ผ๋๊ฐ (๋ฒํธยท์ฝ๋๋ ์ ์ธ)
|
|
2169
|
+
- [ ] ๋ ์ง๋ฅผ `YYYY-MM-DD` ๋ก ํ๊ธฐํ๋๊ฐ (`toLocaleDateString()` โ, ยง1-4)
|
|
2170
|
+
- [ ] ํ๋ ํญ์ ๋ฑ๊ธ(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`)์ผ๋ก ์คฌ๋๊ฐ โ px ์ง์ ์ง์ โ (ยง4-3)
|
|
2171
|
+
- [ ] ์กฐํ ์กฐ๊ฑด์ผ๋ก ์ฐ๋ ์
๋ ํธยท๋ ์งยท์๊ฐ ํผ์ปค์ `clearable` ์ ์คฌ๋๊ฐ, ๊ทธ ์ํ๊ฐ `null` ์ ๋ด์ ์ ์๋๊ฐ (ยง3-7-4 โ ํ์ ์
๋ ฅ ํ๋์๋ ์ผ์ง ์๋๋ค)
|
|
2172
|
+
- [ ] `SKeyValueTable` ์ ์งง์ ํ์ `tdColSpan` ์ ์ฃผ์ด ์ ์ฒด ์ด ์๋ฅผ ์ฑ์ ๋๊ฐ (ยง4-3 โ ์ ์ฑ์ฐ๋ฉด ๊ทธ ๊ตฌ๊ฐ์ ํ ๊ตฌ๋ถ์ ์ด ๋๊ธด๋ค)
|
|
1600
2173
|
- [ ] ํ๋จ ๋ฒํผ์ด ์๋ ๋ถ๋ฆฌ(`justify-between`)์ด๊ณ , ๋๋๋ฆฌ๊ธฐ๊ฐ ์ผ์ชฝ ๋ ยท ์คํ์ด ์ค๋ฅธ์ชฝ ๋์ธ๊ฐ
|
|
1601
2174
|
- [ ] ํ์ด์ง์ `color="primary"` ์ฑ์ ๋ฒํผ์ด **1๊ฐ๋ฟ**์ธ๊ฐ (`danger` ์ฑ์๋ 1๊ฐ, `SDropdownButton` ํฌํจ)
|
|
1602
2175
|
- [ ] ๋ฒํผ `size` ๊ฐ ์์น ๊ท์น๊ณผ ๋ง๋๊ฐ (ํ ๋ด๋ถ `xs` / ํ๋ฉด ์ก์
`sm` / ๋ชจ๋ฌ ํธํฐ `md`)
|
|
@@ -1605,7 +2178,7 @@ export default function ProductDetailPage() {
|
|
|
1605
2178
|
- [ ] `SGhostButton` ์ `intent` ๊ฐ ์กฐ์ ์ฑ๊ฒฉ๊ณผ ๋ง๋๊ฐ (๋๋๋ฆด ์ ์๋ ์ญ์ ๋ง `danger`, ์ง์
ยท์ถ๊ฐ๋ `action`, ๋๋จธ์ง๋ `default`)
|
|
1606
2179
|
- [ ] ์ฐฝ์ ๋์ธ ๋ ยง3-3-1 ํ๋ณ ์์๋ฅผ ๋ฐ๋๋๊ฐ (๊ทธ ์์ฒด๊ฐ ํ๋ฉด โ `SPopup` / ์คํ ์ฌ๋ถ๋ง ํ์ โ `SModal.confirm` / ๋ชจ๋ฌ ์์์ ์์ฑ โ `SActionModal`)
|
|
1607
2180
|
- [ ] ์์
์ฉ ๋ชจ๋ฌ์ `SActionModal` + `SModal.create` ๋ก ๋ง๋ค์๋๊ฐ (์ง์ ์ค๋ฒ๋ ์ด โ)
|
|
1608
|
-
- [ ] ๋ชจ๋ฌยท๋๋ก์ด์ ํ๋จ ๋ฒํผ์ ๋ณธ๋ฌธ์ด ์๋๋ผ `button` ยท `footerLeft` prop ์ผ๋ก ๋๊ฒผ๋๊ฐ (ยง3-3-4)
|
|
2181
|
+
- [ ] ๋ชจ๋ฌยท๋๋ก์ด์ ํ๋จ ๋ฒํผ์ ๋ณธ๋ฌธ์ด ์๋๋ผ `button` ยท `footerLeft` prop ์ผ๋ก ๋๊ฒผ๋๊ฐ (ยง3-3-4), ์นด๋ ์์์ ๋ซํ๋ ์ก์
๋ ๊ฐ์ prop ์ผ๋ก ๋๊ฒผ๋๊ฐ (ยง3-7-8)
|
|
1609
2182
|
- [ ] ์ฑ ๋ถํธ์คํธ๋ฉ์ Provider ์์ชฝ์ `<SModalOutlet />` ์ด ํ ๋ฒ ๋ ๋๋์ด ์๋๊ฐ (ยง4-1 โ ์์ผ๋ฉด ๋ชจ๋ฌ ์์์ ์ฑ ํ
์ด ์ฃฝ๋๋ค), ๊ทธ ๋์ ์ผ๋ก ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ฅผ Provider ๋ก ๋ค์ ๊ฐ์ธ์ง ์์๋๊ฐ
|
|
1610
2183
|
- [ ] ๊ณ ๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ยง2-0 ์ ์ ์ธต์ ๋์๋๊ฐ (์์๋ฅผ `SPage` ์ ์ง์ ๋์ง ์์๋๊ฐ, ๋ธ๋ก์ `div` ๋ก ๊ฐ์ธ์ง ์์๋๊ฐ)
|
|
1611
2184
|
- [ ] ยง2-0 ํฌํจ ๊ท์น์ ์ง์ผฐ๋๊ฐ (์นด๋ ์ ์นด๋ โ, ํ ์
์ ๋ธ๋ก โ)
|
|
@@ -1633,6 +2206,8 @@ export default function ProductDetailPage() {
|
|
|
1633
2206
|
| `sellmate/component-group-gap` | warn | ยง2-2 ์ปดํฌ๋ํธ ๊ทธ๋ฃน ๊ฐ๊ฒฉ (์ฒดํฌ๋ฐ์ค ๊ฐ๋ก 24 / ์ธ๋ก 8 ๋ฑ) |
|
|
1634
2207
|
| `sellmate/table-numeric-align` | warn | ยง3-4 ์ซ์ ์ปฌ๋ผ์ `align: 'right'` ๋๋ฝ (`--fix` ์ง์) |
|
|
1635
2208
|
| `sellmate/require-locale-number` | warn | ยง1-4 ๊ธ์กยท์๋ ๋ฑ ์๋ ์ปฌ๋ผ์ `toLocaleString()` ๋๋ฝ |
|
|
2209
|
+
| `sellmate/field-width-grade` | warn | ยง4-3 ํ๋ ํญ์ด `maxLength` ์ํ๊ณผ ๋ง๋ ๋ฑ๊ธ์ธ๊ฐ, px ๋ฅผ ์ง์ ์ ์ง ์์๋๊ฐ (px โ ๋ฑ๊ธ `--fix` ์ง์) |
|
|
2210
|
+
| `sellmate/table-column-width` | warn | ยง3-4 ์ปฌ๋ผ ํญ ๋ฏธ์ง์ (๊ธฐ๋ณธ 120px)ยทpx ์๋ ๊ฐ(`%`ยท`clamp()`)ยท`autoWidth` ์ค์ฉ |
|
|
1636
2211
|
| `sellmate/no-arbitrary-class` | off | ยง1-2 ํ ํฐ ์๋ ์์ฑ์ ์์ ๊ฐ (`text-[14px]`, `bg-[#eee]`) โ ํ์ด ์ผค ๋๋ง |
|
|
1637
2212
|
|
|
1638
2213
|
`configs.strict` ๋ฅผ ์ฐ๋ ํ๋ก์ ํธ๋ ์ ๋ถ error ์ด๊ณ ๊ฐ๊ฒฉ `sd-` ์ ๋๊น์ง ๊ฐ์ ๋๋ค.
|