@hjmds/design-contracts 1.27.1 โ 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activity-chip.d.ts +1 -1
- package/dist/activity-chip.js +1 -1
- package/dist/activity-chip.js.map +1 -1
- package/dist/auth-screen.d.ts +71 -5
- package/dist/auth-screen.d.ts.map +1 -1
- package/dist/auth-screen.js +60 -2
- package/dist/auth-screen.js.map +1 -1
- package/dist/base-recipes.d.ts +9 -1
- package/dist/base-recipes.d.ts.map +1 -1
- package/dist/base-recipes.js +7 -1
- package/dist/base-recipes.js.map +1 -1
- package/dist/behaviors.d.ts +1 -1
- package/dist/breadcrumb.d.ts +1 -1
- package/dist/breadcrumb.js +1 -1
- package/dist/breadcrumb.js.map +1 -1
- package/dist/calendar.d.ts +1 -1
- package/dist/calendar.js +2 -2
- package/dist/calendar.js.map +1 -1
- package/dist/catalog.d.ts +148 -89
- package/dist/catalog.d.ts.map +1 -1
- package/dist/component-contracts.d.ts +1 -1
- package/dist/component-contracts.js +1 -1
- package/dist/component-contracts.js.map +1 -1
- package/dist/component-recipes.d.ts +105 -60
- package/dist/component-recipes.d.ts.map +1 -1
- package/dist/component-recipes.js +138 -69
- package/dist/component-recipes.js.map +1 -1
- package/dist/conversation-row.d.ts +2 -2
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +6 -4
- package/dist/conversation-row.js.map +1 -1
- package/dist/counter-badge-recipe.d.ts +1 -1
- package/dist/counter-badge-recipe.js +1 -1
- package/dist/counter-badge-recipe.js.map +1 -1
- package/dist/data-table.d.ts +4 -4
- package/dist/data-table.js +4 -4
- package/dist/data-table.js.map +1 -1
- package/dist/date-picker.d.ts +1 -1
- package/dist/design-profile.d.ts.map +1 -1
- package/dist/design-profile.js +19 -16
- package/dist/design-profile.js.map +1 -1
- package/dist/file-picker.d.ts +1 -1
- package/dist/file-picker.js +1 -1
- package/dist/file-picker.js.map +1 -1
- package/dist/foundations.d.ts +18 -14
- package/dist/foundations.d.ts.map +1 -1
- package/dist/foundations.js +18 -13
- package/dist/foundations.js.map +1 -1
- package/dist/heading.d.ts +13 -13
- package/dist/heading.js.map +1 -1
- package/dist/icon-button-recipe.d.ts +23 -0
- package/dist/icon-button-recipe.d.ts.map +1 -1
- package/dist/icon-button-recipe.js +20 -1
- package/dist/icon-button-recipe.js.map +1 -1
- package/dist/number-field.d.ts +1 -1
- package/dist/otp-field.d.ts +1 -1
- package/dist/password-field.d.ts +1 -1
- package/dist/result.d.ts +1 -1
- package/dist/result.js +2 -2
- package/dist/result.js.map +1 -1
- package/dist/screen-patterns.d.ts +12 -1
- package/dist/screen-patterns.d.ts.map +1 -1
- package/dist/screen-patterns.js +12 -1
- package/dist/screen-patterns.js.map +1 -1
- package/dist/semantic-colors.d.ts +10 -0
- package/dist/semantic-colors.d.ts.map +1 -1
- package/dist/semantic-colors.js +6 -0
- package/dist/semantic-colors.js.map +1 -1
- package/dist/sheet.d.ts +7 -4
- package/dist/sheet.d.ts.map +1 -1
- package/dist/sheet.js +8 -5
- package/dist/sheet.js.map +1 -1
- package/dist/side-panel.d.ts +1 -1
- package/dist/side-panel.js +2 -2
- package/dist/side-panel.js.map +1 -1
- package/dist/steps.d.ts +1 -1
- package/dist/steps.js +1 -1
- package/dist/steps.js.map +1 -1
- package/dist/tag.d.ts +1 -1
- package/dist/tag.js +1 -1
- package/dist/tag.js.map +1 -1
- package/dist/timeline.d.ts +1 -1
- package/dist/timeline.js +1 -1
- package/dist/timeline.js.map +1 -1
- package/dist/top.d.ts +4 -4
- package/dist/top.d.ts.map +1 -1
- package/dist/top.js +3 -1
- package/dist/top.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/activity-chip.md +5 -1
- package/docs/auth-screen.md +2 -0
- package/docs/design-profile.md +14 -10
- package/docs/generated/component-maturity.md +1 -1
- package/docs/generated/renderer-evidence.json +9 -5
- package/docs/generated/renderer-evidence.md +1 -1
- package/docs/generated/showcase-manifest.json +1 -1
- package/docs/heading.md +14 -9
- package/docs/sheet.md +2 -0
- package/docs/top.md +4 -3
- package/docs/usage/README.md +1 -1
- package/docs/usage/components/auth-screen-layout.md +26 -9
- package/docs/usage/components/bottom-cta.md +6 -2
- package/docs/usage/components/bottom-navigation.md +5 -1
- package/docs/usage/components/breadcrumb.md +5 -1
- package/docs/usage/components/button.md +2 -0
- package/docs/usage/components/chat-message.md +6 -2
- package/docs/usage/components/checkbox-group.md +5 -1
- package/docs/usage/components/collapsible.md +1 -0
- package/docs/usage/components/comment-thread-row.md +1 -1
- package/docs/usage/components/effect-surface.md +2 -2
- package/docs/usage/components/heading.md +14 -12
- package/docs/usage/components/icon-button.md +5 -0
- package/docs/usage/components/inline-edit.md +1 -1
- package/docs/usage/components/list-detail-screen.md +1 -1
- package/docs/usage/components/list-row.md +23 -11
- package/docs/usage/components/list.md +10 -5
- package/docs/usage/components/notice.md +5 -1
- package/docs/usage/components/notification-item.md +5 -1
- package/docs/usage/components/photo-source-sheet.md +1 -1
- package/docs/usage/components/repeatable-field-group.md +1 -1
- package/docs/usage/components/saved-items-screen.md +1 -1
- package/docs/usage/components/screen-layout.md +10 -6
- package/docs/usage/components/search-screen.md +2 -2
- package/docs/usage/components/section.md +5 -1
- package/docs/usage/components/segmented-control.md +1 -1
- package/docs/usage/components/sheet.md +17 -13
- package/docs/usage/components/skeleton.md +41 -15
- package/docs/usage/components/statistic.md +5 -1
- package/docs/usage/components/switch.md +3 -2
- package/docs/usage/components/table-column-settings.md +1 -1
- package/docs/usage/components/tag.md +5 -1
- package/docs/usage/components/text.md +6 -4
- package/docs/usage/components/timeline.md +5 -1
- package/docs/usage/components/toast.md +10 -1
- package/docs/usage/components/top-bar.md +5 -1
- package/docs/usage/components/top.md +1 -1
- package/docs/usage/components/upload-item.md +1 -1
- package/docs/usage/compositions/adaptive-content.md +5 -1
- package/docs/usage/compositions/compound-controls.md +2 -1
- package/docs/usage/compositions/design-profile-comparison.md +1 -1
- package/docs/usage/compositions/family-drawer.md +5 -3
- package/docs/usage/compositions/input-sheet.md +1 -1
- package/docs/usage/compositions/interaction-flow-apply.md +3 -3
- package/docs/usage/compositions/photo-source.md +3 -3
- package/docs/usage/compositions/selection-motion.md +5 -1
- package/docs/usage/compositions/toast-layout.md +4 -4
- package/docs/usage/compositions/visual-foundations.md +5 -4
- package/docs/usage/screens/common-login.md +9 -7
- package/docs/usage/screens/common-search.md +1 -1
- package/docs/usage/screens/landing.md +15 -14
- package/docs/usage/screens/notification-settings.md +4 -2
- package/docs/usage/tokens/typography.md +21 -13
- package/package.json +1 -1
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
ํ์ฌ ํ๋ฉด ์์ ๋ชจ๋ฌ๋ก ๋์ฐ๋ ๋ณด์กฐ ์์
ํจ๋์ ์ด๋ค. ์ค์ ํ ํญ๋ชฉ ํธ์ง, ์ ํ ๋ชฉ๋ก(ํ
๋งยท์ธ์ด),
|
|
14
14
|
์งง์ ์
๋ ฅ ํผ, ๊ณต์ ยท์ฌ์ง ์ถ์ฒ ์ ํ์ฒ๋ผ ๋๋๋ฉด ์๋ ํ๋ฉด์ผ๋ก ๋์์ค๋ ์์
์ด๋ค. ๊ธฐ๋ณธ์ ํ๋จ์์ ์ฌ๋ผ์จ๋ค.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
์ ๋ชฉ์ ํ๋ฉด์ ๊ทธ๋ฆฌ์ง ์๊ณ ๋ํ์์์ ์ ๊ทผ์ฑ ์ด๋ฆ์ผ๋ก๋ง ์ด๋ค(2026-10-17). ํค๋ณด๋ ๋์ด, top inset, ๋ณธ๋ฌธ maxHeight ๋ณด์ ์ Sheet๊ฐ ์์ ํ๋ค. ์ ํ wrapper์์ Modalยทํค๋ณด๋ listenerยท๊ฐ์ maxHeight๋ฅผ
|
|
17
17
|
๋ค์ ๋ง๋ค์ง ์๋๋ค.
|
|
18
18
|
|
|
19
19
|
## ์ฐ์ง ์์ ๋
|
|
@@ -83,11 +83,11 @@ import { Sheet } from "@hjmds/react-native/overlays";
|
|
|
83
83
|
| `open` ยท `defaultOpen` | `boolean` | ๋น์ ์ด `false` | Web์ ์ ์ดํ๋ฉด `onOpenChange` ํ์, ๋น์ ์ด๋ฉด `trigger` ํ์ |
|
|
84
84
|
| `onOpenChange` | `(open: boolean, detail: { reason }) => void` | โ | reason: `trigger` ยท `close-action` ยท `escape` ยท `back` ยท `outside` ยท `swipe` ยท `programmatic`. Android ํ๋์จ์ด back์ Native์์๋ง `back` |
|
|
85
85
|
| `onDismissComplete` | `(detail: { reason }) => void` | โ | ํ๋ฉด์ด ์ค์ ๋ก ์ฌ๋ผ์ง ๋ค ํ ๋ฒ. ๋ค์ modalยทํ๋ฉด ์ด๋์ ์ฌ๊ธฐ์ |
|
|
86
|
-
| `dismissPolicy` | `{ dismissible?, dismissWhileBusy?, outsideDismiss?, escapeOrBackDismiss?, swipeDismiss? }` | `dismissible` true ยท `dismissWhileBusy` false ยท `outsideDismiss`
|
|
86
|
+
| `dismissPolicy` | `{ dismissible?, dismissWhileBusy?, outsideDismiss?, escapeOrBackDismiss?, swipeDismiss? }` | `dismissible` true ยท `dismissWhileBusy` false ยท `outsideDismiss` true(๋ชจ๋ ์์น, ๋ฏธ๊ฒ์ ๋ณ๊ฒฝ, ์ด์ ํ๋จ false) ยท `escapeOrBackDismiss` true ยท `swipeDismiss` true(๋ฏธ๊ฒ์ ๋ณ๊ฒฝ, ์ด์ false) | ๋ซ๊ธฐ ํ์ฉ ๋ฒ์. `resolveSheetDismissPolicy(placement, override)` |
|
|
87
87
|
| `keyboardAvoidance` (Native) | `boolean` | `true`(๋ฏธ๊ฒ์ ๋ณ๊ฒฝ, ์ด์ `false`) | ๋ชจ๋ฌ์ด ํค๋ณด๋ ๋์ด๋งํผ ๋นํจ๋ค. ์์ชฝ `ScreenLayout`์ ์ค๋ณต ์ฒ๋ฆฌํ์ง ์๋๋ค |
|
|
88
88
|
| `showClose` | `boolean` | ํ๋จ `false` ยท ์ `true`(๋ฏธ๊ฒ์) | ๋จธ๋ฆฌ์ ร ํ์. ํ๋จ ์ํธ๋ ๋๋๊ทธ๋ก ๋ซ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด๋ผ ๋๋ค |
|
|
89
89
|
| `busy` | `boolean` | `false` | ์ฌ์ฉ์ ๋ซ๊ธฐ๋ฅผ ๋ง๋๋ค |
|
|
90
|
-
| `title` ยท `closeLabel` | ๋ฌธ๊ตฌ | ํ์ | Native `title`์ด element๋ฉด `accessibilityTitle`(string)
|
|
90
|
+
| `title` ยท `closeLabel` | ๋ฌธ๊ตฌ | ํ์ | `title`์ ํ๋ฉด์ ๋ณด์ด์ง ์๋๋ค. Web์ `aria-labelledby`๊ฐ ๊ฐ๋ฆฌํค๋ ์๊ฐ ์จ๊น `h2`, Native๋ ๋ํ์์ `accessibilityLabel`๊ณผ ๋ฐฐ์น ๋ฐ 1pt ๋จธ๋ฆฌ๊ธ์ด๋ค(๋ฏธ๊ฒ์). Native `title`์ด element๋ฉด `accessibilityTitle`(string) ํ์์ด๋ฉฐ element ์์ฒด๋ ๊ทธ๋ ค์ง์ง ์๋๋ค. `closeLabel`์ ์์ก์ดยทรยท๊ฐ๋ฆผ๋ง ๋ซ๊ธฐ์ ์ด๋ฆ |
|
|
91
91
|
| `description` ยท `footer` | ๋
ธ๋(Native `description`์ `string`) | โ | `footer`๋ ์คํฌ๋กค ๋ฐ ๊ณ ์ . ์ ์ฅ ํ๋์ ์ฌ๊ธฐ |
|
|
92
92
|
| `detents`(Web) ยท `activeDetent` ยท `onDetentChange` | `readonly ("medium" \| "large" \| "full")[]` ยท `(detent) => void` | โ | ์ฌ์ฉ์๊ฐ ๋์ด๋ฅผ ๋ฐ๊ฟ ๋จ๊ณ. `detentLabels: { expand, collapse }` ํ์ |
|
|
93
93
|
| `keyboardAvoidance` ยท `scrollable`(Native) | `boolean` | `false` | ์
๋ ฅ ํผ์ ๋ ๋ค ์ผ ๋ค |
|
|
@@ -112,17 +112,17 @@ import { Sheet } from "@hjmds/react-native/overlays";
|
|
|
112
112
|
| --- | --- | --- |
|
|
113
113
|
| ํฌ๊ธฐ | ํ๋จ ์ํธ ๋์ด: `auto` ๋ด์ฉ ๋์ด(์ต๋ ํ๋ฉด ๋์ด ร `maxHeightRatio` 0.9), `medium` 60%, `large` 85%, `full` ์ safe area ์ ์ ์ฒด ๋์ด(0.9 ์ํ ์์). Web ํ๋จ ์ํธ ์ต๋ ํญ 640. ์ ๋ ๋ชจ์๋ฆฌ๋ง `radius.xl` 24. ์ ์ํธ(`start`ยท`end`): Web ํญ `min(28rem, 100%)`ยท๋์ด ํ๋ฉด โ 32, Native ํญ 88%(์ต๋ 420)ยทํ๋ฉด ๋์ด | `sheetRecipe.sizes`ยท`content`ยท`web`, `.hjm-sheet`, Native `Sheet` |
|
|
114
114
|
| ๊ฐ๊ฒฉ | ๋ ํ๋ซํผ ๊ฐ์ ๊ฐ: ์ข์ฐ `content.paddingHorizontal`(`spacing.lg` 20), ์ยท์๋ `content.paddingTop/Bottom`(`spacing.sm` 12, ํ๋จ ์ํธ๋ ์๋ safe area๋ฅผ ๋ํจ), ๋จธ๋ฆฌยท๋ณธ๋ฌธยทfooter ์ฌ์ด `body.gap`(`spacing.md` 16), footer ์ `footer.paddingTop`(`spacing.sm` 12), ์ ๋ชฉโ๋ซ๊ธฐ `header.gap`(`spacing.sm` 12), footer ๋ฒํผ ์ฌ์ด `footer.gap`(`spacing.sm` 12) | `.hjm-sheet__*`, `sheetRecipe.content`ยท`body`ยท`footer` |
|
|
115
|
-
| ์์ยท์ ๋ ฌ | ๋จธ๋ฆฌ(
|
|
116
|
-
| ๊ณ ์ ยท์คํฌ๋กค | ๋ณธ๋ฌธ๋ง ์คํฌ๋กค, ๋จธ๋ฆฌยท`footer` ๊ณ ์ (Native๋ `scrollable`์ผ ๋ ScrollView). ๊ณ ์ ๋์ด(`medium`ยท`large`ยท`full`, ์ ์ํธ)์์๋ ๋ณธ๋ฌธ์ด ๋จธ๋ฆฌยทfooter๋ฅผ ๋บ ๋จ์ ๋์ด๋ฅผ ์ฐจ์งํ๊ณ `footer`๋ ์ํธ ์๋์ ๋ถ๋๋ค. ๊ทธ๋์ ๋ณธ๋ฌธ์ `flex: 1` ์์(SearchScreen, ๋ชฉ๋ก ํ๋ฉด)์ด ๊ทธ ๋์ด๋ฅผ ์ฑ์ด๋ค(Web `.hjm-sheet__body` `flex: 1 1 auto`, Native ๋ณธ๋ฌธ `flexGrow: 1`ยท`minHeight: 0`, 1.13.1 ๋ณ๊ฒฝ). `auto`๋ ๋ด์ฉ ๋์ด ๊ทธ๋๋ก๋ค. ์ ์ฅยทํ์ธ์ `footer`์. ์๋ ์์ ์์ญ์ ์ํธ๊ฐ ์๊ธฐ ์ฌ๋ฐฑ์ ๋ํ๋ค(`spacing.sm` 12 + ์๋ inset, Web์ `env(safe-area-inset-bottom)`). ์ inset์ ์ํธ๊ฐ ์ฌ๋ผ๊ฐ ๋์ด๋ฅผ ์ค์ธ๋ค. ์ ํ์ด inset์ ๋ค์ ๋ํ์ง ์๋๋ค | `.hjm-sheet__body`, `sheetRecipe.safeArea`, Native `Sheet` |
|
|
115
|
+
| ์์ยท์ ๋ ฌ | ์์ก์ด(ํ๋จ) โ ๋จธ๋ฆฌ(์ค๋ช
+ ๋ซ๊ธฐ, ๋ ๋ค ์์ผ๋ฉด ๊ทธ๋ฆฌ์ง ์์) โ ๋ณธ๋ฌธ โ `footer`. ๋ณด์ด๋ ์ ๋ชฉ ์ค์ ์๋ค(๋ฏธ๊ฒ์). ๋จธ๋ฆฌ ์ต์ ๋์ด 44(`control.minTouchTarget`), ร๋ ์ค๋ช
์ด ์์ด๋ ๋ ์ชฝ ๊ฐ์ ์๋ฆฌ๋ค. ๊ธฐ๋ณธ ํ๋จ ์ํธ๋ ๋จธ๋ฆฌ๊ฐ ์์ด ๋ณธ๋ฌธ์ด ์์ก์ด ์์ญ ๋ฐ๋ก ์๋ `body.gap` 16์์ ์์ํ๋ค. Web footer๋ ์ค๋ฅธ์ชฝ ์ ๋ ฌ ๊ฐ๋ก ์ค [๋ณด์กฐ][์ฃผ]. Native footer๋ ์ธ๋ก ์ด์ด๋ผ ๊ฝ ์ฐฌ ํญ ๋ฒํผ์ ์ฃผ ํ๋ ๋จผ์ ๋๋ค. ํ๋จ ์ํธ๋ ํญ์ ์ ๊ฐ์ด๋ฐ 36ร4 ์์ก์ด(ํฐ์น ์ต์ ํญ 44)๋ฅผ ๋๋ค. `detents`๊ฐ ์์ผ๋ฉด ๋์ด ์ ํ ๋ฒํผ, ์์ผ๋ฉด `closeLabel` ์ด๋ฆ์ ๋ซ๊ธฐ ๋ฒํผ์ด๋ค. ์์ก์ดยท๋จธ๋ฆฌ ์์ญ์ ์๋๋ก ๋์ด `sheetDragRecipe.dismissDistanceRatio`(์ํธ ๋์ด์ 25%) ๋๋ `dismissVelocity` 0.5px/ms๋ฅผ ๋๊ธฐ๋ฉด `swipe`๋ก ๋ซ๊ณ , ์๋๋ฉด ์ ์๋ฆฌ๋ก ๋์๊ฐ๋ค(๋ฏธ๊ฒ์, WebยทNative ๋์ผ) | `sheetRecipe.header`ยท`handle`, `.hjm-sheet__footer`, `.hjm-sheet__handle` |
|
|
116
|
+
| ๊ณ ์ ยท์คํฌ๋กค | ๋ณธ๋ฌธ๋ง ์คํฌ๋กค, ๋จธ๋ฆฌยท`footer` ๊ณ ์ (Native๋ `scrollable`์ผ ๋ ScrollView). ์คํฌ๋กค ์์ญ์ ์ํธ ์ข์ฐ ์ฌ๋ฐฑ(`sheetRecipe.content.paddingHorizontal` 20) ๋๊น์ง ๋๊ณ ์ฌ๋ฐฑ์ ์คํฌ๋กค ๋ด์ฉ ์์ชฝ์ ๋๋ค(Web `.hjm-sheet__body` padding, Native ScrollView `marginHorizontal: -20` + ๋ด์ฉ `paddingHorizontal: 20`). ๊ทธ๋์ ๋ณธ๋ฌธ ListRow์ 8 ํ๋ฉด์ด ์๋ฆฌ์ง ์๊ณ ๋ด์ฉ ์์น๋ ๊ทธ๋๋ก๋ค. ๊ณ ์ ๋์ด(`medium`ยท`large`ยท`full`, ์ ์ํธ)์์๋ ๋ณธ๋ฌธ์ด ๋จธ๋ฆฌยทfooter๋ฅผ ๋บ ๋จ์ ๋์ด๋ฅผ ์ฐจ์งํ๊ณ `footer`๋ ์ํธ ์๋์ ๋ถ๋๋ค. ๊ทธ๋์ ๋ณธ๋ฌธ์ `flex: 1` ์์(SearchScreen, ๋ชฉ๋ก ํ๋ฉด)์ด ๊ทธ ๋์ด๋ฅผ ์ฑ์ด๋ค(Web `.hjm-sheet__body` `flex: 1 1 auto`, Native ๋ณธ๋ฌธ `flexGrow: 1`ยท`minHeight: 0`, 1.13.1 ๋ณ๊ฒฝ). `auto`๋ ๋ด์ฉ ๋์ด ๊ทธ๋๋ก๋ค. ์ ์ฅยทํ์ธ์ `footer`์. ์๋ ์์ ์์ญ์ ์ํธ๊ฐ ์๊ธฐ ์ฌ๋ฐฑ์ ๋ํ๋ค(`spacing.sm` 12 + ์๋ inset, Web์ `env(safe-area-inset-bottom)`). ์ inset์ ์ํธ๊ฐ ์ฌ๋ผ๊ฐ ๋์ด๋ฅผ ์ค์ธ๋ค. ์ ํ์ด inset์ ๋ค์ ๋ํ์ง ์๋๋ค | `.hjm-sheet__body`, `sheetRecipe.safeArea`, Native `Sheet` |
|
|
117
117
|
| ์ข์ ํญยทํฐ ๊ธ์ | ํญ < 640์ด๋ฉด ํ๋จ ์ํธ๊ฐ ํ๋ฉด ํญ์ ์ฑ์ด๋ค. Web footer๋ ์ค์ ๋ฐ๊พผ๋ค. ํฐ ๊ธ์๋ก ๋ด์ฉ์ด ๊ธธ์ด์ง๋ฉด `auto`๋ ์ต๋ 90%์์ ๋ฉ์ถ๊ณ ๋ณธ๋ฌธ์ด ์คํฌ๋กค๋๋ค(`full`์ ์ safe area๊น์ง) | `.hjm-sheet[data-placement="bottom"]`, `maxHeightRatio` |
|
|
118
118
|
|
|
119
119
|
```text
|
|
120
120
|
ํญ < 640(๋ชจ๋ฐ์ผ) Web ๋์ ํญ: ๊ฐ์ด๋ฐ, ์ต๋ 640
|
|
121
121
|
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
122
|
-
โ
|
|
122
|
+
โ (๋ค ํ๋ฉด + scrim, ๋๋ฅด๋ฉด ๋ซํ) โ โ (scrim, ๋๋ฅด๋ฉด ๋ซํ) โ
|
|
123
123
|
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ โ โญโโโโโโโโโโโโโโโโโโโโโฎ โ
|
|
124
|
-
โ โ
|
|
125
|
-
โ โ
|
|
124
|
+
โ โ โฌโฌ ์์ก์ด โ โ โ โ โฌโฌ ์์ก์ด โ โ
|
|
125
|
+
โ โ (์ค๋ช
) (showClose์ผ ๋ ร)โ โ โ ๊ณ ์ โ โ ๋ณธ๋ฌธ(์คํฌ๋กค) โ โ
|
|
126
126
|
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ [์ทจ์] [์ ์ฅ] โ โ
|
|
127
127
|
โ โ ๋ณธ๋ฌธ โ ์คํฌ๋กค โ โ โโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโ
|
|
128
128
|
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
@@ -135,20 +135,21 @@ import { Sheet } from "@hjmds/react-native/overlays";
|
|
|
135
135
|
|
|
136
136
|
## ๊ผญ ์งํฌ ๊ฒ
|
|
137
137
|
|
|
138
|
-
- ํ๋จ ์ํธ๋ ๋๋๊ทธ๋ก ๋ด๋ ค ๋ซ์ ์ ์์ด์ผ ํ๋ค(ํ์).
|
|
138
|
+
- ํ๋จ ์ํธ๋ ๋๋๊ทธ๋ก ๋ด๋ ค ๋ซ์ ์ ์์ด์ผ ํ๋ค(ํ์). ์ํธ ๋ฐ(๊ฐ๋ฆผ๋ง)์ ๋๋ฅด๊ฑฐ๋ ํด๋ฆญํด๋ ๋ซํ๋ค(๋ชจ๋ ์์น, ๋ฏธ๊ฒ์). ร๋ ํ๋จ ์ํธ์์ ๊ธฐ๋ณธ์ผ๋ก ๋๋ค. ๋๋๊ทธ๋ฅผ ์ธ ์ ์๋ ์ฌ์ฉ์๋ฅผ ์ํด ์์ก์ด ๋ซ๊ธฐ ๋ฒํผ, ๊ฐ๋ฆผ๋ง ๋ซ๊ธฐ(Native๋ `closeLabel` ์ด๋ฆ์ ๋ฒํผ), EscapeยทAndroid back, VoiceOver ๋ซ๊ธฐ ์ ์ค์ฒ๋ ์ ์งํ๋ค. Web์ ๋๋ฆ์ด ๊ฐ๋ฆผ๋ง์์ ์์ํ ๋๋ง ๋ซ์ ์ํธ ์์์ ์์ํ ๋๋๊ทธ ์ ํ์ ๋ซ์ง ์๋๋ค. `outsideDismiss: false`ยท`swipeDismiss: false`๋ ๊ฒฐ์ ํ์ธ์ฒ๋ผ ์ค์๋ก ๋ซํ๋ฉด ์ ๋๋ ํ๋ฆ์๋ง ์ฐ๊ณ ์ด์ ๋ฅผ ์ ํ ์ฝ๋์ ๋จ๊ธด๋ค.
|
|
139
|
+
- ์ ์ฅํ์ง ์์ ์
๋ ฅ์ ๋ฒ๋ฆด์ง ๋ฌป๋ ํ๋ฆ์ ์ ์ดํ `onOpenChange`์์ ์ฒ๋ฆฌํ๋ค. ๊ฐ๋ฆผ๋ง(`outside`)ยท๋๋๊ทธ(`swipe`)ยทEscapeยทbackยท์์ก์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ฏ๋ก ํ์ธ์ ๊ฑด๋๋ฐ์ง ์๋๋ค. ์ ์ฅ ์ค `busy`๋ ๋ชจ๋ ์ฌ์ฉ์ ๋ซ๊ธฐ๋ฅผ ๋ง๋๋ค.
|
|
139
140
|
|
|
140
141
|
- ์
๋ ฅ ํผ Native Sheet๋ `keyboardAvoidance`์ `scrollable`์ ํจ๊ป ์ผ๊ณ , ์ ํ์ ํค๋ณด๋ listenerยทmaxHeightยท
|
|
141
142
|
์ค์ฒฉ ScrollView๋ฅผ ์ง์ด๋ค. ๋ณธ๋ฌธ์ด FlatList ๋ฑ ๊ฐ์ํ ๋ชฉ๋ก์ด๋ฉด `scrollable={false}`๋ก ๋๋ค.
|
|
142
143
|
- ์ ์ฅ ๋ฒํผ์ `footer`์ ๋๋ค. ์ ์ฅ ์ค์๋ `busy`๋ก ๋ซ๊ธฐ๋ฅผ ๋ง๋๋ค.
|
|
143
144
|
- ๋ซํ ๋ค ๋ค๋ฅธ modal์ ์ด๊ฑฐ๋ ํ๋ฉด ์ด๋์ `onDismissComplete`์์ ํ๋ค. ๋ modal์ ๋์์ ๋์ฐ์ง ์๋๋ค.
|
|
144
|
-
- ๋ฌธ๊ตฌ(`title`, `closeLabel`, ๋ณธ๋ฌธ)๋ i18n ํค๋ก ๋ฃ๋๋ค.
|
|
145
|
+
- ๋ฌธ๊ตฌ(`title`, `closeLabel`, ๋ณธ๋ฌธ)๋ i18n ํค๋ก ๋ฃ๋๋ค. ๋ณด์ด์ง ์๋ `title`๋ ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ์ฝ์ผ๋ฏ๋ก ๋ฒ์ญํ๋ค. `as unknown as string` ์บ์คํธ๋
|
|
145
146
|
`.hjm-sheet__header` CSS ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ํ์ง ์๋๋ค.
|
|
146
147
|
- Native `contentStyle`์ ๋ฐฐ์น key๋ง ์ด๋ค. ๋์ด๋ `size`๋ก ์ ํ๋ค(`contentStyle={{ height }}` ๊ธ์ง, ๋ฐฐ์น ๋ฐ key๋ ์ง์ํ์ง ์์).
|
|
147
148
|
- Web Sheet๋ `layoutStyle`์ ๋ฐ์ง ์๋๋ค(Web `layoutStyle` ์ ์ธ 15๊ฐ ์ค ํ๋). ํ๋ฉด ์์นยทํฌ๊ธฐ๋ `placement`ยท`size`๊ฐ ์ ํ๋ค.
|
|
148
149
|
|
|
149
150
|
## ํ๋ซํผ ์ฐจ์ด
|
|
150
151
|
|
|
151
|
-
Flutter ์ ํ์ `showModalBottomSheet` ๋์ `showHjmBottomSheet`(`hjm_flutter`)๋ก ์ฐ๋ค. ๊ฐ์ ๊ธฐ๋ณธ๊ฐ(๋๋๊ทธ ๋ซ๊ธฐยท์์ก์ด ํ์ยท๋ฐฐ๊ฒฝ ํญ ๋ซ๊ธฐ ๋ยทร ์์)์ ์ ์ฉํ๊ณ ๋ณธ๋ฌธ์ `HjmSheetLayout`์ ์ด๋ค(๋ฏธ๊ฒ์).
|
|
152
|
+
Flutter ์ ํ์ `showModalBottomSheet` ๋์ `showHjmBottomSheet`(`hjm_flutter`)๋ก ์ฐ๋ค. ๊ฐ์ ๊ธฐ๋ณธ๊ฐ(๋๋๊ทธ ๋ซ๊ธฐยท์์ก์ด ํ์ยท๋ฐฐ๊ฒฝ ํญ ๋ซ๊ธฐ ๋ยทร ์์)์ ์ ์ฉํ๊ณ ๋ณธ๋ฌธ์ `HjmSheetLayout`์ ์ด๋ค(๋ฏธ๊ฒ์). 2026-10-17์ ์ ๋ชฉ ์จ๊นยท๊ฐ๋ฆผ๋ง ๋ซ๊ธฐ ๊ฒฐ์ ์ ์์ง Flutter์ ๋ฐ์ํ์ง ์์๋ค.
|
|
152
153
|
|
|
153
154
|
| ํญ๋ชฉ | Web | Native |
|
|
154
155
|
| --- | --- | --- |
|
|
@@ -158,12 +159,12 @@ Flutter ์ ํ์ `showModalBottomSheet` ๋์ `showHjmBottomSheet`(`hjm_flutte
|
|
|
158
159
|
| ๊ณ ์ ๋์ด ๋ณธ๋ฌธ ์ฑ์ฐ๊ธฐ | ํญ์ `flex: 1 1 auto` | `size`๊ฐ `auto`๊ฐ ์๋๊ฑฐ๋ ์ ์ํธ์ผ ๋ `flexGrow: 1`(1.13.1๋ถํฐ). `scrollable`์ด๋ฉด ScrollView ์์ฒด๋ง ๋๊ณ ๊ทธ ์ ๋ด์ฉ์ ๋ด์ฉ ๋์ด๋ค |
|
|
159
160
|
| ์ด์ | `initialFocusRef`, `returnFocusRef`, focus trap | `returnFocusRef` |
|
|
160
161
|
| ๊ฒน์นจ ์์ | `modalPriority`, `portalContainer` | RN `Modal` props(`testID` ๋ฑ) |
|
|
161
|
-
| `title` ํ์
| `ReactNode` | `string` ๋๋ element + `accessibilityTitle` |
|
|
162
|
+
| `title` ํ์
(๋ณด์ด์ง ์์) | `ReactNode`(์๊ฐ ์จ๊น `h2` ์) | `string` ๋๋ element + `accessibilityTitle`(element๋ ๊ทธ๋ฆฌ์ง ์์) |
|
|
162
163
|
|
|
163
164
|
### GestureSheet(Native optional)
|
|
164
165
|
|
|
165
166
|
- controlled `open`/`onOpenChange(open)`๋ง ์๋ค. `title`ยท`closeLabel`ยท`children` ํ์, `snapPoints` ๊ธฐ๋ณธ `["50%", "90%"]`,
|
|
166
|
-
`initialIndex` ๊ธฐ๋ณธ `0`, `busy`๋ฉด ๋์ด ๋ซ๊ธฐยทbackdrop ๋ซ๊ธฐ๋ฅผ ๋ง๋๋ค. ๋ซ๊ธฐ ๋ฒํผ์ด ๋ณธ๋ฌธ ๋์ ์๋์ผ๋ก ๋ค์ด๊ฐ๋ค.
|
|
167
|
+
`initialIndex` ๊ธฐ๋ณธ `0`, backdrop์ ๋๋ฅด๋ฉด ๋ซํ๊ณ `busy`๋ฉด ๋์ด ๋ซ๊ธฐยทbackdrop ๋ซ๊ธฐ๋ฅผ ๋ง๋๋ค. `title`์ ๋ณด์ด์ง ์๋ ๋จธ๋ฆฌ๊ธยท์ ๊ทผ์ฑ ์ด๋ฆ์ด๋ค(๋ฏธ๊ฒ์). ๋ซ๊ธฐ ๋ฒํผ์ด ๋ณธ๋ฌธ ๋์ ์๋์ผ๋ก ๋ค์ด๊ฐ๋ค.
|
|
167
168
|
- ํ๋ฉด์ `GestureHandlerRootView` ์์ `GestureSheetProvider`๋ก ๊ฐ์ผ๋ค. ์
๋ ฅ์ `GestureSheetInput`์ ์ด๋ค.
|
|
168
169
|
- RN `Modal` ์์ GestureSheet๋ฅผ ๋๋ฉด Android back์ด `onRequestClose`๋ก๋ง ๊ฐ๋ค. ๊ทธ host๋
|
|
169
170
|
`dismissTopGestureSheet()`๋ฅผ ๋จผ์ ๋ถ๋ฅด๊ณ `false`์ผ ๋๋ง ์๊ธฐ ์์ ์ ๋ซ๋๋ค.
|
|
@@ -180,6 +181,9 @@ Flutter ์ ํ์ `showModalBottomSheet` ๋์ `showHjmBottomSheet`(`hjm_flutte
|
|
|
180
181
|
|
|
181
182
|
## ๊ทผ๊ฑฐ
|
|
182
183
|
|
|
184
|
+
- ์ํธ์ ๋ณด์ด๋ ์ ๋ชฉ ์์: 2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ โ ์ํธ ์์ชฝ ์ ๋ชฉ ์ค(์: SearchScreen ํํฐ ์ํธ์ "ํํฐ")์ ๋ชจ๋ ์ํธ์์ ์์ค๋ค. `title`์ ๋ํ์์ ์ ๊ทผ์ฑ ์ด๋ฆ์ผ๋ก ๋จ๋๋ค. Native SelectยทCombobox ์ ํ ์ํธ์ GestureSheet๋ ๊ฐ๋ค. ๊ฐ์ ์์
์์ ๋จธ๋ฆฌ๊ฐ ์์ก์ด ์์ญ(`.hjm-sheet__drag`, 2026-10-16) ์์ผ๋ก ๋ค์ด๊ฐ `.hjm-sheet > .hjm-sheet__header` ์ ํ์๊ฐ ๋ง์ง ์์ Dialog ์ ์ฌ๋ฐฑ 20์ด ์์ด๋ Web ๊ฒฐํจ์ ๊ณ ์ณค๋ค.
|
|
185
|
+
- ๊ฐ๋ฆผ๋ง ๋๋ฅด๋ฉด ๋ซํ: 2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ โ ํ๋จ ์ํธ๋ ์ํธ ๋ฐ์ ๋๋ฅด๋ฉด ๋ซํ๋ค(2026-10-16์ ๋๋๊ทธ ์ ์ฉ ๊ธฐ๋ณธ์ ๋์ฒด). ๋ซ๊ธฐ ๊ฒฝ๋ก๋ ์์ก์ดยท๋๋๊ทธ์ ๊ฐ์ `requestClose`๋ผ `busy`ยท`dismissPolicy`ยท์ ์ดํ owner์ ํ์ธ์ ๊ทธ๋๋ก ๋ฐ๋ฅธ๋ค.
|
|
186
|
+
- ์คํฌ๋กค ์์ญ์ ์ํธ ์ฌ๋ฐฑ ๋๊น์ง: 2026-10-17 1.27.2 ์ฑํ ์ ๊ฒ. utilverse ํ
๋งยท์ธ์ด ์ํธ(Native `scrollable`)์์ ์ฌ๋ฐฑ 20์ด ScrollView ๋ฐ๊นฅ์ ์์ด ListRow ์ ํ ํ๋ฉด์ ์์์ด ์๋ ธ๋ค(3x ์ธก์ : ์ ํ ํ
๋๋ฆฌ ์ ์ ์์, ์ ์ 21โ381pt). Web์ ๋ณธ๋ฌธ ์คํฌ๋กค ์์๊ฐ ์ด๋ฏธ ์ฌ๋ฐฑ์ ์์ชฝ์ ๋์ด ์๋ฆผ 0(402ยท1280, LTRยทRTL)์ด์๊ณ Native๋ฅผ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋ง์ท๋ค(์์ ํ ์ ์ 13ptยท๋ 13pt).
|
|
183
187
|
- Sheet๊ฐ ์ ๋ชฉ ์ ๋ ฌยทํค๋ณด๋ยทtop insetยทmaxHeight ๋ณด์ ์์ : 2026-09-23 ์๋น ๊ฐ์ฌ์์ ์ ํ๋ง๋ค Sheet๋ฅผ ์ง์ ์กฐ๋ฆฝํ๋ฉฐ ์ด ๊ฐ์ ๋ฐ๋ก ๋ณด์ ํ๊ณ ์์๋ค.
|
|
184
188
|
- Native `keyboardAvoidance` ๊ธฐ๋ณธ true: 2026-10-16 ํค๋ณด๋ ์ ์ ์กฐ์ฌ โ ์
๋ ฅ ์ํธ๊ฐ ์ต์
์ ๋น ๋จ๋ ค ํค๋ณด๋์ ๊ฐ๋ ค์ก๋ค.
|
|
185
189
|
- ๋์์ธ ํ๋กํ ์์(radiusยทfloating shadow): 2026-10-07 ํ
๋ง ์๋น ๊ฒฝ๋ก ์ ๊ฒ์์ ๊ณ ์ foundation/recipe ๊ฐ์ด ๋จ์ ๊ณณ์ ๋ณด์ํ๋ค.
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
- ์ํ: ๋ฐฐํฌ
|
|
5
5
|
- ์ง์: Web ยท Native
|
|
6
6
|
- ์ ์ฉ: 1.12.1
|
|
7
|
-
- ๊ฒํ ์ผ: 2026-10-
|
|
8
|
-
- ๊ทผ๊ฑฐ: `src/component-recipes.ts`(`skeletonRecipe`), `src/foundations.ts`(`glyph`)
|
|
7
|
+
- ๊ฒํ ์ผ: 2026-10-17
|
|
8
|
+
- ๊ทผ๊ฑฐ: `src/component-recipes.ts`(`skeletonRecipe`), `src/semantic-colors.ts`(`surface.placeholder`), `src/foundations.ts`(`glyph`ยท`control`)
|
|
9
9
|
- ์คํ ๋ฆฌ๋ถ: `๋ฐฐํฌ/์ปดํฌ๋ํธ/์ํ์ ์๋ฆผ/์ค์ผ๋ ํค`
|
|
10
10
|
|
|
11
11
|
## ์ธ์ ์ฐ๋
|
|
@@ -37,27 +37,38 @@
|
|
|
37
37
|
// Web
|
|
38
38
|
import { Skeleton } from "@hjmds/react/feedback";
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
<
|
|
43
|
-
|
|
40
|
+
// ์์ญ์์ ํ ๋ฒ๋ง ์๋ฆฐ๋ค. Skeleton ์์ฒด๋ aria-hidden์ด๋ค.
|
|
41
|
+
<Stack gap="sm" role="status" aria-label={t("profile.loading")} aria-busy="true">
|
|
42
|
+
<Stack axis="inline" gap="sm" align="center">
|
|
43
|
+
<Skeleton shape="circle" />
|
|
44
|
+
<Skeleton shape="text" lines={2} layoutStyle={{ flex: 1 }} />
|
|
45
|
+
</Stack>
|
|
46
|
+
<Skeleton shape="media" />
|
|
47
|
+
</Stack>
|
|
44
48
|
```
|
|
45
49
|
|
|
46
50
|
```tsx
|
|
47
51
|
// Native
|
|
48
52
|
import { Skeleton } from "@hjmds/react-native/feedback";
|
|
49
53
|
|
|
50
|
-
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
<Stack gap="sm" accessible accessibilityLabel={t("profile.loading")} accessibilityState={{ busy: true }}>
|
|
55
|
+
<Stack axis="inline" gap="sm" align="center">
|
|
56
|
+
<Skeleton shape="circle" />
|
|
57
|
+
<Skeleton shape="text" lines={2} layoutStyle={{ flex: 1 }} />
|
|
58
|
+
</Stack>
|
|
59
|
+
<Skeleton shape="media" />
|
|
60
|
+
</Stack>
|
|
54
61
|
```
|
|
55
62
|
|
|
63
|
+
๋ชฉ๋ก ํ ํ๋๋ฅผ ๋์ ํ ๋๋ Skeleton์ ์กฐ๋ฆฝํ์ง ๋ง๊ณ [ListRow](list-row.md)์ `loading`์ ์ด๋ค. ํ ๋์ดยท์ฌ๋กฏ
|
|
64
|
+
๋ฐฐ์น๋ฅผ ๊ทธ๋๋ก ์ ์งํ๊ณ ๊ฐ์ ์ฑ์์์ ์ด๋ค.
|
|
65
|
+
|
|
56
66
|
## ์ถ๊ณผ ๊ธฐ๋ณธ๊ฐ
|
|
57
67
|
|
|
58
68
|
| prop | ๊ฐ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
59
69
|
| --- | --- | --- | --- |
|
|
60
|
-
| `shape` | `block`(๋์ด `spacing.xxl
|
|
70
|
+
| `shape` | `block`(๋์ด `spacing.xxl` 32ยทradius `md`) ยท `text`(`spacing.md` 16ยท`sm`) ยท `circle`(`glyph.xxl` 44 ์ง๋ฆยท`full`) ยท `media`(ํญ 100%ยท16:9ยท`md`) ยท `button`(`control.buttonHeight.medium` 44ยท`md`) | `block` | ๋ชจ์๊ณผ ๊ธฐ๋ณธ ํฌ๊ธฐ. `media`ยท`button`์ 2026-10-17 ์ถ๊ฐ |
|
|
71
|
+
| `lines` | ์์ ์ ์ | `1` | `text` ์ ์ฉ. ์ค ์๋งํผ ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์ค์ 60%(`skeletonRecipe.lines.lastLineWidthPercent`), ์ค ๊ฐ๊ฒฉ `spacing.xs` 8. ํ์ค๋ ๋ฌถ์ ํ๋๋ก ๋๋ค. `width`๋ ๋ฌถ์ ์ ์ฒด ํญ |
|
|
61
72
|
| `animated` | `boolean` | `true`(ํ์ค) | 0.9.12๊น์ง๋ `false`์๋ค. ์ ์ง ๋ธ๋ก์ด ํ์ํ๋ฉด `animated={false}`๋ฅผ ๋ช
์ํ๋ค. reduced motion์ด๋ฉด ๋ renderer ๋ชจ๋ ํ์ค๋ฅผ ๋ฉ์ถ๊ณ ๋ถํฌ๋ช
ํ ๋ ๊ฐ์ผ๋ก ๊ทธ๋ฆฐ๋ค(recipe `reducedMotion: "static"`) |
|
|
62
73
|
| `width` | Web `string \| number` ยท Native `ViewStyle["width"]` | ํญ 100%(circle์ ์ง๋ฆ) | โ |
|
|
63
74
|
| `height` | Web `string \| number` ยท Native `number` | shape ๊ธฐ๋ณธ๊ฐ | โ |
|
|
@@ -80,9 +91,10 @@ import { Skeleton } from "@hjmds/react-native/feedback";
|
|
|
80
91
|
|
|
81
92
|
| ํญ๋ชฉ | ๊ฐ | ๊ทผ๊ฑฐ |
|
|
82
93
|
| --- | --- | --- |
|
|
83
|
-
| ํฌ๊ธฐ | `block` ํญ 100% ยท ๋์ด
|
|
94
|
+
| ํฌ๊ธฐ | `block` ํญ 100% ยท ๋์ด 32, `text` ๋์ด 16, `circle` ์ง๋ฆ 44, `media` ํญ 100% ยท 16:9, `button` ๋์ด 44. ์ฌ๋ฌ ์ค ๋ณธ๋ฌธ์ `lines`๋ก(๋ง์ง๋ง ์ค 60%) | `skeletonRecipe.shapes`ยท`.lines`, `.hjm-skeleton` |
|
|
95
|
+
| ์ | `semanticColors.surface.placeholder`(`text` 12% ํฌ๋ช
๋) ์ฑ์, ํ
๋๋ฆฌ ์์. ๋์ธ ๋ฉด(canvasยทCardยทํ๋กํ ํ
๋ง)์ ๊ธฐ์ค์ผ๋ก ์งํด์ง๋ค | `skeletonRecipe.background`, `--hjm-skeleton-background` |
|
|
84
96
|
| ๊ฐ๊ฒฉ | ์ค์ ์ฝํ
์ธ ์ ๊ฐ๊ฒฉ ํ ํฐ์ ๊ทธ๋๋ก ์ด๋ค(์: [Stack](stack.md) `spacing.xs` 8). Skeleton์ margin์ ๋ฃ์ง ์๋๋ค | โ |
|
|
85
|
-
| ์์ยท์ ๋ ฌ | ๋ก๋ ๋ค ์ค์ ์ฝํ
์ธ ๊ฐ ๋์ผ ์๋ฆฌ์ ๊ฐ์ ์์๋ก.
|
|
97
|
+
| ์์ยท์ ๋ ฌ | ๋ก๋ ๋ค ์ค์ ์ฝํ
์ธ ๊ฐ ๋์ผ ์๋ฆฌ์ ๊ฐ์ ์์๋ก. ๋ชฉ๋ก ํ์ ListRow `loading`, ์นด๋๋ `media` + `text lines={2}` + `button` | โ |
|
|
86
98
|
| ๊ณ ์ ยท์คํฌ๋กค | ์คํฌ๋กค ์์ญ ์์ ์ฝํ
์ธ ๋ง ๋์ ํ๋ค. ๊ณ ์ ๋ฐ(TopBarยทBottomCTA)๋ ๊ทธ๋๋ก ๋๋ค | โ |
|
|
87
99
|
| ์ข์ ํญยทํฐ ๊ธ์ | `block`ยท`text`๋ ํญ 100%๋ผ ์ปจํ
์ด๋๋ฅผ ๋ฐ๋ฅธ๋ค. ๋์ด๋ ๊ธ์ ํฌ๊ธฐ์ ๋ฌด๊ดํ ๊ณ ์ ๊ฐ์ด๋ค | `.hjm-skeleton` |
|
|
88
100
|
|
|
@@ -93,13 +105,13 @@ import { Skeleton } from "@hjmds/react-native/feedback";
|
|
|
93
105
|
Native `style`์ ์ ๊ฑฐ๋ ์์ฑ์ด๋ค.
|
|
94
106
|
- Web Skeleton์ `aria-hidden`์ด๋ค. ๋ก๋ฉ ์ฌ์ค์ ์๋ ค์ผ ํ๋ฉด ์์ญ ๋จ์๋ก ํ ๋ฒ ์๋ฆฐ๋ค
|
|
95
107
|
(์: ๊ฐ์ผ ์์ญ์ `aria-busy`, ๋๋ Spinner ํ๋). Skeleton๋ง๋ค ๋ผ๋ฒจ์ ๋ถ์ด์ง ์๋๋ค.
|
|
96
|
-
- Web์ `HjmProvider` ์์์ ๋ ๋ํ๋ค.
|
|
108
|
+
- Web์ `HjmProvider` ์์์ ๋ ๋ํ๋ค. ์ฑ์์ยท์ ์ง๋ฆยท๋ฒํผ ๋์ดยทmedia ๋น์จยท์ค ๊ฐ๊ฒฉยทํ์ค ๊ฐ์ provider๊ฐ ๋ด๋ณด๋ด๋ `--hjm-skeleton-*` ๋ณ์๋ก ์ฝ๋๋ค.
|
|
97
109
|
|
|
98
110
|
## ํ๋ซํผ ์ฐจ์ด
|
|
99
111
|
|
|
100
112
|
| ํญ๋ชฉ | Web | Native |
|
|
101
113
|
| --- | --- | --- |
|
|
102
|
-
| ์ ๊ทผ์ฑ | ํญ์ `aria-hidden` | `accessibilityLabel`์ ์ฃผ๋ฉด `busy` ์ํ๋ก ์ฝํ, ์์ผ๋ฉด ์จ๊น |
|
|
114
|
+
| ์ ๊ทผ์ฑ | ํญ์ `aria-hidden` | `accessibilityLabel`์ ์ฃผ๋ฉด `busy` ์ํ๋ก ์ฝํ, ์์ผ๋ฉด ์จ๊น(Android `no-hide-descendants`) |
|
|
103
115
|
| ๋์ด | `string \| number` | `number`๋ง |
|
|
104
116
|
| ๋ชจ์๋ฆฌ ์ง์ ์ง์ | ์์ | `radius`(0.9 ํธํ์ฉ, `shape`๋ณด๋ค ์ฐ์ ) |
|
|
105
117
|
| reduced motion ํ๋จ | `prefers-reduced-motion`ยท`.hjm-root[data-motion="reduced"]` | provider `environment.reducedMotion` |
|
|
@@ -112,3 +124,17 @@ import { Skeleton } from "@hjmds/react-native/feedback";
|
|
|
112
124
|
`{...(first ? { accessibilityLabel: t("โฆ") } : {})}`์ฒ๋ผ ์กฐ๊ฑด๋ถ spread๋ก ๋๊ธด๋ค.
|
|
113
125
|
- ํ์ฌ Web `style`์ `width`ยท`height` prop ๊ฐ ๋ค์ ํผ์ณ์ ธ ํฌ๊ธฐยท๋ฐฐ๊ฒฝ์ ๋ฎ์ ์ ์๋ค(ํ์
์ด ๋ง์ง ์๋๋ค). ํฌ๊ธฐ๋ `width`ยท`height`,
|
|
114
126
|
๋ฐฐ์น๋ `layoutStyle`๋ก ์ค๋ค.
|
|
127
|
+
|
|
128
|
+
## ๊ทผ๊ฑฐ
|
|
129
|
+
|
|
130
|
+
- 2026-10-17 ์ฌ์ฉ์ ์์ฒญ("์ค์ผ๋ ํค ์ ์์ด ๊ฐ์ ํด์ค"): Native ์คํ ๋ฆฌ๊ฐ ํฐ ๋ฐํ ์ ์
์ ํ
๋๋ฆฌ ๋ง๋ ํ๋๋ก๋ง ๋ณด์๋ค.
|
|
131
|
+
์์ธ์ `skeletonRecipe.background`๊ฐ ํ๋ฉด ๋ฐํ๊ณผ ๊ฐ์ `semanticColors.canvas`์๊ณ , ๋ renderer๊ฐ ๊ทธ ์์ 1px
|
|
132
|
+
ํ
๋๋ฆฌ๋ฅผ ์ง์ ๊ทธ๋ฆฐ ๊ฒ์ด๋ค. 2026-09-29 "๋์ ํ์ยท์ฐํ๋ ๋ฉด์ canvas + ํ
๋๋ฆฌ" ๋ฐฉํฅ์ Skeleton์๋ ์ ์ฉํ์ง๋ง,
|
|
133
|
+
์๋ฆฌํ์๋ ์ฑ์ด ๋ฉด์ด์ด์ผ ๋ชจ์์ด ์ฝํ๋ฏ๋ก SkeletonยทListRow `loading`์ ๊ทธ ๋ฐฉํฅ์ ์์ธ๋ก ๋๋ค.
|
|
134
|
+
- ์ฑ์์ ๋ถํฌ๋ช
`surfaceAlt` ๋์ `text` 12% ํฌ๋ช
๋๋ค. ๋๋น(๋ฐํ ๋๋น, ํ์ค ์ต๊ณ ์ ): ๊ธฐ๋ณธ ๋ฐ์ ํ
๋ง ์ฝ 1.27:1(ํ์ค ์ต์ ์ 1.14),
|
|
135
|
+
์ด๋์ด ํ
๋ง ์ฝ 1.36:1(1.16). ๋ถํฌ๋ช
`surfaceAlt`๋ 1.23 / 1.20, Card ๋ฉด(`surface`) ์์์๋ 1.12 / 1.10์ด์๊ณ , `surfaceAlt`๊ฐ `bg`๋งํผ ๋ฐ์
|
|
136
|
+
ํ๋กํ ํ๋ ํธ์์๋ ๊ฑฐ์ ๋ณด์ด์ง ์์๋ค. ์ฅ์ ์์๋ผ ํ
์คํธ ๋๋น ๊ธฐ์ค์ ์ ์ฉํ์ง ์๋๋ค.
|
|
137
|
+
- `media`ยท`button`ยท`lines`๋ ์นด๋ยท๋ณธ๋ฌธ ์๋ฆฌํ์๋ฅผ ์ ํ๋ง๋ค ๋ง๋๋ก ๋ค์ ์กฐ๋ฆฝํ๋ ์ผ์ ์ค์ด๋ ค๊ณ ์ถ๊ฐํ๋ค. ๋ชฉ๋ก ํ์
|
|
138
|
+
๊ธฐ์กด ListRow `loading`์ด ๋งก์ผ๋ฏ๋ก ๋ณ๋ ์กฐํฉ ์ปดํฌ๋ํธ๋ ๋์ง ์๋๋ค.
|
|
139
|
+
- ์์ง์์ ๊ธฐ์กด ๋ถํฌ๋ช
๋ ํ์ค(0.56โ1)๋ฅผ ์ ์งํ๋ค. ๋น ๋ (shimmer)๋ Native์ ๊ทธ๋ผ๋ฐ์ด์
peer๊ฐ ํ์ํ๊ณ reduced
|
|
140
|
+
motion์์๋ ์ด์ฐจํผ ์ ์งํด์ผ ํ๋ค.
|
|
@@ -93,7 +93,7 @@ Native ํ๋ ์์ ๋ชจ์๋ฆฌ๋ `statisticRecipe.presentations`์ ์ญํ ์ Pr
|
|
|
93
93
|
| ํญ๋ชฉ | ๊ฐ | ๊ทผ๊ฑฐ |
|
|
94
94
|
| --- | --- | --- |
|
|
95
95
|
| ํฌ๊ธฐ | `presentation="surface"`์ ์์ชฝ ์ฌ๋ฐฑ: `comfortable` `spacing.md` 16 ยท `compact` `spacing.sm` 12(๋ ํ๋ซํผ). ํ
๋๋ฆฌ `stroke.default` 1, radius `md` 12 | `statisticRecipe.density`ยท`presentations`, `styles.css` `.hjm-statistic[data-presentation="surface"]` |
|
|
96
|
-
| ๊ธ์ | ๋ผ๋ฒจ `label` 12
|
|
96
|
+
| ๊ธ์ | ๋ผ๋ฒจ `label` 12 medium(`compact` `caption` 11), ๊ฐ `heading` 24 semibold(`fontWeight.semibold`, `compact` `title` 18. 2026-10-17 ํฐ ๊ธ์ ๋จ๊ณ ํ์ง๋ก `heading.level2` ๊ตต๊ธฐ ์ฐธ์กฐ๋ฅผ ๋์), prefixยทsuffix `body` 14 medium ๋ณธ๋ฌธ์, hint `caption`, ์ถ์ธ `caption` medium(๋ ํ๋ซํผ). 2026-10-06๊น์ง Web์ ๋ผ๋ฒจ ๋ณธ๋ฌธ 14 medium, ๊ฐ์ ๋ฐ๋์ ๊ด๊ณ์์ด 18, prefixยทsuffix๋ ํ๋ฆฐ์์ด์๋ค(1.13.0 ๋ณ๊ฒฝ) | `statisticRecipe.density`ยท`label`ยท`value`ยท`affix`ยท`hint`ยท`trend`, `.hjm-statistic__*` |
|
|
97
97
|
| ๊ฐ๊ฒฉ | ๊ทธ๋ฃน ๊ฐ๊ฒฉ `statisticRecipe.group.gap` = `spacing.xs` 8. ์งํ ์ ์ค ๊ฐ๊ฒฉ(๋ผ๋ฒจยท๊ฐยท์ถ์ธ) `comfortable` `spacing.xs` 8 ยท `compact` `spacing.xxs` 4(๋ ํ๋ซํผ) | `styles.css` `.hjm-statistic`ยท`.hjm-statistic-group`, `statisticRecipe` |
|
|
98
98
|
| ์์ยท์ ๋ ฌ | ํ๋ฉด ์์ชฝ ์์ฝ ์์ญ์ด๋ ์นด๋ ์์ ๋๋ค. ์งํ ์ฌ๋ฌ ๊ฐ๋ [Grid](grid.md)๋ฅผ ์ง์ ์ง์ง ๋ง๊ณ `StatisticGroup`์ผ๋ก ๋ฌถ๋๋ค | โ |
|
|
99
99
|
| ๊ณ ์ ยท์คํฌ๋กค | โ | โ |
|
|
@@ -135,3 +135,7 @@ Native ํ๋ ์์ ๋ชจ์๋ฆฌ๋ `statisticRecipe.presentations`์ ์ญํ ์ Pr
|
|
|
135
135
|
์์ชฝ ์์ง์ด๋ ์์น Storybook์ ์์์ ์์(de-DE), ๋น๋ผํด ์ซ์(ar-EG), ์ง์ ํ๊ธฐ(en-US),
|
|
136
136
|
๋์ ์ค์ด๊ธฐ์ RTL ๋น๊ต๋ฅผ ์ ๊ณตํ๋ค. ์์ยท์์ ์์ ๋ ๊ธฐ๋ก ๊ฐ์๊ฐ ์๋ ์ธก์ ๊ฐ์ด๋ค.
|
|
137
137
|
Web์ ์๋ฆฌ ๋จ์ ์ ํ, Native๋ ์งํ ์ ์ฒด ์ ํ์ด๋ฉฐ ๊ฐ์ ์๊ฐ ํจ๊ณผ๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
|
|
138
|
+
|
|
139
|
+
## ๊ทผ๊ฑฐ
|
|
140
|
+
|
|
141
|
+
2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ ("๊ตต๊ธฐ ์ข๋ ์ค์ฌ"): ๋ชจ๋ ๊ธ์ ๊ตต๊ธฐ๋ฅผ ํ ๋จ๊ณ ๋ฎ์ท๋ค. ํฐ ์ซ์ยท์ ํ ์ํ 600(ํฐ ์ ๋ชฉ ๋จ๊ณ๋ ๊ฐ์ ๋ ํ์ง), ์ ๋ชฉยท๊ฐ์กฐ 500, label 500, ๋ณธ๋ฌธ 400์ด๋ฉฐ ์ ๋ณธ์ [ํ์ดํฌ๊ทธ๋ํผ](../tokens/typography.md)๋ค.
|
|
@@ -77,8 +77,8 @@ import { Switch } from "@hjmds/react-native/inputs";
|
|
|
77
77
|
|
|
78
78
|
| ํญ๋ชฉ | ๊ฐ | ๊ทผ๊ฑฐ |
|
|
79
79
|
| --- | --- | --- |
|
|
80
|
-
| ํฌ๊ธฐ | ํธ๋ `small` 44ร26(thumb 22) ยท `medium` 52ร32(thumb 28), ์์ชฝ ์ฌ๋ฐฑ 2. iOS Native๋ `UISwitch` ๊ณ ์ ํฌ๊ธฐ. ๋ฃจํธ ์ต์ ๋์ด 44(`control.minTouchTarget`). ํ ๋์ด๋ ์ค๋ช
์ด ์์ผ๋ฉด 44
|
|
81
|
-
| ๊ฐ๊ฒฉ | ์ด๋ฆ๊ณผ ํธ๋ ์ฌ์ด `spacing.sm` 12, ์ด๋ฆ๊ณผ ์ค๋ช
์ฌ์ด `spacing.xxs` 4. ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ ๋๋ [List](list.md)
|
|
80
|
+
| ํฌ๊ธฐ | ํธ๋ `small` 44ร26(thumb 22) ยท `medium` 52ร32(thumb 28), ์์ชฝ ์ฌ๋ฐฑ 2. iOS Native๋ `UISwitch` ๊ณ ์ ํฌ๊ธฐ. ๋ฃจํธ ์ต์ ๋์ด 44(`control.minTouchTarget`). ํ ๋์ด๋ ์ค๋ช
์ด ์์ผ๋ฉด 44. ์ค๋ช
์ด ๋ณด์ด๋ ํ์ ์์๋ ์์ชฝ ์ฌ๋ฐฑ 8(`rowPaddingVertical`, ListRow comfortable๊ณผ ๊ฐ๋ค)์ ์ต์ 56(`rowTwoLineMinHeight` = ์ด๋ฆ 20 + 4 + ์ค๋ช
16 + 8ร2). WebยทNative ๊ฐ๋ค. `labelVisibility="hidden"`์ด๋ฉด ์ค๋ช
์ด ์์ด๋ 44 | `switchRecipe.sizes`ยท`rowMinHeight`ยท`rowPaddingVertical`ยท`rowTwoLineMinHeight`, `styles.css` `.hjm-switch[data-two-line]`, `react-native/src/inputs.tsx` |
|
|
81
|
+
| ๊ฐ๊ฒฉ | ์ด๋ฆ๊ณผ ํธ๋ ์ฌ์ด `spacing.sm` 12, ์ด๋ฆ๊ณผ ์ค๋ช
์ฌ์ด `spacing.xxs` 4. ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ ๋๋ [List](list.md)(`separator`๋ก ๊ตฌ๋ถ์ ์ ํ)์ ๋ฃ๊ณ Switch ์ฌ์ด์ Stack gap ๊ฐ์ ์ฌ๋ฐฑ์ ๋ํ์ง ์๋๋ค. ํ ๊ฐ๊ฒฉ์ ํ์ ์ต์ ๋์ดยท์์ชฝ ์ฌ๋ฐฑ์ด ๋งก๋๋ค(์ค๋ช
์๋ ํ ๊ฐ๊ฒฉ 56) | `styles.css` `.hjm-switch`ยท`.hjm-switch__copy`, `react-native/src/inputs.tsx` |
|
|
82
82
|
| ์์ยท์ ๋ ฌ | ์ค์ ๋ชฉ๋ก์์๋ `presentation="row"`๋ก ํ ์ ์ฒด ํญ์ ์ฐ๊ณ ์ด๋ฆยท์ค๋ช
์ด ์(์ผ์ชฝ), ํธ๋์ด ๋(์ค๋ฅธ์ชฝ) | `styles.css` `.hjm-switch[data-presentation="row"]` |
|
|
83
83
|
| ๊ณ ์ ยท์คํฌ๋กค | โ | โ |
|
|
84
84
|
| ์ข์ ํญยทํฐ ๊ธ์ | ๊ธ์ ๋ฐฐ์จ โฅ 1.6(`largeTextThreshold`)์ด๋ฉด `row`๋ ์ด๋ฆยท์ค๋ช
์๋๋ก ํธ๋์ ๋ด๋ฆฐ๋ค | `switchRecipe.stackedTextScale`, `styles.css` `.hjm-root[data-large-text="true"]` |
|
|
@@ -130,3 +130,4 @@ presentation="row" ํฐ ๊ธ์(โฅ1.6)
|
|
|
130
130
|
## ๊ทผ๊ฑฐ
|
|
131
131
|
|
|
132
132
|
- ๊ธฐ๋ณธ `row` ํต์ผ: 2026-10-17 ์นยท์ฑ ๋น๊ต ๋๊ตฌ์์ ๊ฐ์ ์ค์ ์ค์์น๊ฐ Web์ ํธ๋ ๋จผ์ (inline), Native๋ ์ด๋ฆ ๋จผ์ (row)๋ก ๊ฑฐ์ธ์ฒ๋ผ ๊ทธ๋ ค์ก๋ค.
|
|
133
|
+
- ์ค๋ช
์๋ ํ 56ยท์ฌ๋ฐฑ 8, ์์ ๋ gap ์์: 2026-10-17 ์ฌ์ฉ์ ๋ณด๊ณ (์๋ฆผ ์ค์ "๊ฐ๊ฒฉ์ด ์ปค") โ ๊ธ์ 40์ ListRow ๋ ์ค 68์ ๋น๋ฆฐ ์ต์ ๋์ด์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ Stack gap 16์ด ๊ฒน์ณ ํ ๊ฐ๊ฒฉ์ด 84์๋ค.
|
|
@@ -66,7 +66,7 @@ import { TableColumnSettings } from "@hjmds/react-native/collection-editing";
|
|
|
66
66
|
| --- | --- | --- |
|
|
67
67
|
| ํฌ๊ธฐ | ์ฒดํฌ๋ฐ์ค๋ [Checkbox](checkbox.md) ๊ธฐ๋ณธ `medium`, ์ด๋ ๋ฒํผ์ `ghost` [Button](button.md) ๊ธฐ๋ณธ `medium`(๋์ด 44) | `collection-editing.tsx` |
|
|
68
68
|
| ๊ฐ๊ฒฉ | ์ด ์ฌ์ดยท์ฒดํฌ๋ฐ์ค์ ๋ฒํผ ์ค ์ฌ์ดยท๋ฒํผ ์ฌ์ด ๋ชจ๋ `spacing.sm` 12 | `Stack gap="sm"` |
|
|
69
|
-
| ์์ยท์ ๋ ฌ | ์ ๋ชฉ โ ์ด๋ง๋ค [์ฒดํฌ๋ฐ์ค] ๋ค์ ์ค [์์ผ๋ก] [๋ค๋ก], `columns` ์์๋๋ก | ์ renderer |
|
|
69
|
+
| ์์ยท์ ๋ ฌ | ์ ๋ชฉ โ ์ด๋ง๋ค [์ฒดํฌ๋ฐ์ค] ๋ค์ ์ค [์์ผ๋ก] [๋ค๋ก], `columns` ์์๋๋ก ๋ง์ง๋ง [๋ค๋ก]๋ `edge="end"`๋ก ์์ด์ฝ ์นธ์ด ๋ฌถ์ ๋์ ์จ๋ค(์ ์๋ 10 ์์ชฝ, 2026-10-17 ์ค์ธก ๊ฐ์ฌ, [IconButton `edge`](icon-button.md#๋ฐฐ์น)) | ์ renderer |
|
|
70
70
|
| ๊ณ ์ ยท์คํฌ๋กค | ์์ฒด ์คํฌ๋กค ์์. ์ํธยทํ์ค๋ฒ ๋ฑ ๋๋ ์์ญ์ด ์์ ํ๋ค | โ |
|
|
71
71
|
| ์ข์ ํญยทํฐ ๊ธ์ | ์ด๋ ๋ฒํผ ์ค์ด `wrap`์ผ๋ก ์ค๋ฐ๊ฟ | `Stack axis="inline" wrap` |
|
|
72
72
|
|
|
@@ -55,7 +55,7 @@ import { Tag } from "@hjmds/react-native/data-display";
|
|
|
55
55
|
| `accessibilityLabel`(Native) | `string` | ๋ผ๋ฒจ | โ |
|
|
56
56
|
| `style`ยท`labelStyle`(Native) | ์ง์ํ์ง ์์ | โ | ์ ๊ฑฐ๋ ์์ฑ โ `layoutStyle` ๋๋ `tone`. ํ์ฌ ๊ณต๊ฐ props์์ ์ ๊ฑฐ๋์๋ค |
|
|
57
57
|
|
|
58
|
-
๋ชจ์์ radius `sm` ์ฌ๊ฐํ, ์ต์ ๋์ด 20(ํฐ ๊ธ์์์ ๋์ด๋จ), caption ํฌ๊ธฐ
|
|
58
|
+
๋ชจ์์ radius `sm` ์ฌ๊ฐํ, ์ต์ ๋์ด 20(ํฐ ๊ธ์์์ ๋์ด๋จ), caption ํฌ๊ธฐ medium(500) ๊ธ์๋ค.
|
|
59
59
|
|
|
60
60
|
## ๋ฐฐ์น
|
|
61
61
|
|
|
@@ -84,3 +84,7 @@ Native์ ๋ชจ์๋ฆฌ๋ Provider์ `tokens.radius.sm`์ด๋ค. metadata ์๋ฏธ์
|
|
|
84
84
|
| ์ถ๊ฐ style prop | `className`ยท`style`(HTML ์์ฑ) | `style`ยท`labelStyle`(์ ๊ฑฐ๋ ์์ฑ) |
|
|
85
85
|
| ref | `forwardRef`(`span`) | ์์ |
|
|
86
86
|
| import ๊ฒฝ๋ก | `/display` | `/data-display` |
|
|
87
|
+
|
|
88
|
+
## ๊ทผ๊ฑฐ
|
|
89
|
+
|
|
90
|
+
2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ ("๊ตต๊ธฐ ์ข๋ ์ค์ฌ"): ๋ชจ๋ ๊ธ์ ๊ตต๊ธฐ๋ฅผ ํ ๋จ๊ณ ๋ฎ์ท๋ค. ํฐ ์ซ์ยท์ ํ ์ํ 600(ํฐ ์ ๋ชฉ ๋จ๊ณ๋ ๊ฐ์ ๋ ํ์ง), ์ ๋ชฉยท๊ฐ์กฐ 500, label 500, ๋ณธ๋ฌธ 400์ด๋ฉฐ ์ ๋ณธ์ [ํ์ดํฌ๊ทธ๋ํผ](../tokens/typography.md)๋ค.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
| ์ํฉ | ๋์ ์ธ ๊ฒ |
|
|
19
19
|
| --- | --- |
|
|
20
20
|
| ์งง์ ์ํยท๊ฒฐ๊ณผ ๋ฌธ๊ตฌ๋ฅผ ๋ณ๊ฒฝ ์๋ฆผ์ผ๋ก ์ ๋ฌ | [StatusText](#statustext) |
|
|
21
|
-
| ๋ฌธ์ ์ ๋ชฉ ๋จ๊ณ(`h1`~)๊ฐ
|
|
21
|
+
| ๋ฌธ์ ์ ๋ชฉ ๋จ๊ณ(`h1`~)๊ฐ ํ์ํ ์ ๋ชฉ(ํฌ๊ธฐ๋ Text์ ๊ฐ์ ๋จ๊ณ, ์ต๋ 24px) | [Heading](heading.md) |
|
|
22
22
|
| ํ๋ฉด ์ฒซ ์๋ฆฌ์ ์ ๋ชฉ ๋ธ๋ก(๋ณด์กฐ ๋ฌธ์ฅยทํ๋ ํฌํจ) | [Top](top.md) |
|
|
23
23
|
| ๋ณธ๋ฌธ ๋ฌถ์์ ํค๋ ํ | [Section](section.md) |
|
|
24
24
|
| ์ซ์ ์งํ์ ๊ทธ ๋ผ๋ฒจ | [Statistic](statistic.md) |
|
|
@@ -61,7 +61,7 @@ import { Text } from "@hjmds/react-native/primitives";
|
|
|
61
61
|
| --- | --- | --- | --- |
|
|
62
62
|
| `variant` | `caption`(11) ยท `label`(12) ยท `body`(14) ยท `bodyLarge`(16) ยท `title`(18) ยท `titleLarge`(20) ยท `heading`(24) | `body` | ํ๋ฉดยท์น์
์ ๋ชฉ์ ๋ชจ์์ด ์๋๋ผ [Heading](heading.md)์ผ๋ก ์ด๋ค |
|
|
63
63
|
| `fontRole` | `ui` ยท `display` ยท `reading` ยท `code` | ์ ๋ชฉ variant๋ display, ๋ณธ๋ฌธ์ reading, caption/label์ ui | ๋ช
์๊ฐ์ด ๊ธฐ๋ณธ์ ๋ฎ๋๋ค. [์ญํ ์ง์นจ](../tokens/font-roles.md), 1.16.0 ๋ณ๊ฒฝ |
|
|
64
|
-
| `emphasis` | `regular` ยท `medium`
|
|
64
|
+
| `emphasis` | `regular` 400 ยท `medium` 500 ยท `strong` 500(์ ๋ชฉ ๊ตต๊ธฐ) | ํ๋กํ์ด ์์ผ๋ฉด variant ๊ตต๊ธฐ, ์์ผ๋ฉด `regular`. `label`์ ํ๋กํ๊ณผ ๋ฌด๊ดํ๊ฒ variant ๊ตต๊ธฐ 500 | ๋ช
์๊ฐ์ด ํ๋กํ๊ณผ variant๋ณด๋ค ์ฐ์ |
|
|
65
65
|
| `tone` | `primary` ยท `body` ยท `muted` ยท `subtle` ยท `weak` ยท `brand` ยท `danger` ยท `inverse` | `primary` | โ |
|
|
66
66
|
| `as` | `span` ยท `p` ยท `div` ยท `strong` ยท `small` | `span` | Web๋ง. ๋ฌธ๋จ์ `as="p"` |
|
|
67
67
|
| `align` | `TextStyle["textAlign"]` | ์ฐ๊ธฐ ๋ฐฉํฅ์ ์์ ์ชฝ | Native๋ง |
|
|
@@ -103,13 +103,13 @@ Native๋ Text์ ์ญํ ์ ํด๋น stack์, ์
๋ ฅ/์กฐ์ host๋ ์ ํ ํ๋ก
|
|
|
103
103
|
## ํจ์
|
|
104
104
|
|
|
105
105
|
- `emphasis`๋ฅผ ๋ช
์ํ๋ฉด `variant`์ ๊ตต๊ธฐ๋ฅผ ๋ฎ๋๋ค. `designProfile`์ด ์์ผ๋ฉด ์๋ตํ `emphasis`๋ ํด๋น ํ๋กํ์ `tokens.typography[variant].fontWeight`๋ฅผ ๋ฐ๋ฅธ๋ค. ํ๋กํ์ด ์์ผ๋ฉด ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ `regular`๋ฅผ ์ ์งํ๋ฏ๋ก `variant="title"`๋ ๋ณดํต ๊ตต๊ธฐ๋ก ๊ทธ๋ ค์ง๋ค. ๊ทธ ๊ฒฝ์ฐ ๊ตต์ ์ ๋ชฉ์ `emphasis="strong"`์ผ๋ก ์ง์ ํ๋ค(๋ renderer ๋์ผ).
|
|
106
|
-
- `variant="label"`์ ์์ธ๋ก, ํ๋กํ์ด ์์ด๋ ์๋ตํ `emphasis`๊ฐ `typography.label` ๊ตต๊ธฐ 500(medium)์ผ๋ก ๊ทธ๋ ค์ง๋ค.
|
|
106
|
+
- `variant="label"`์ ์์ธ๋ก, ํ๋กํ์ด ์์ด๋ ์๋ตํ `emphasis`๊ฐ `typography.label` ๊ตต๊ธฐ 500(medium)์ผ๋ก ๊ทธ๋ ค์ง๋ค. label์ 400์ผ๋ก ๊ทธ๋ฆฌ๋ ค๋ฉด `emphasis="regular"`๋ฅผ ๋ช
์ํ๋ค.
|
|
107
107
|
Web์ ์ด ๊ธฐ๋ณธ ๊ตต๊ธฐ๋ฅผ inline `font-weight`๋ก ์ฃผ๋ฉฐ `data-emphasis`๋ `regular`๋ก ๋จ๋๋ค. Native๋ `fonts="pretendard"`์ผ ๋ `Pretendard-Medium` face๋ก ๊ทธ๋ฆฐ๋ค.
|
|
108
108
|
|
|
109
109
|
|
|
110
110
|
## ๊ทผ๊ฑฐ
|
|
111
111
|
|
|
112
|
-
2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ : ํผ ๋ผ๋ฒจยท์น์
๋ถ์ ๋ชฉ์ด ๋ณธ๋ฌธ ๋๋น ์ฝํด `label` ๊ธฐ๋ณธ ๊ตต๊ธฐ๋ฅผ 500์ผ๋ก ์ ํ๋ค(๋ณธ๋ฌธ 400๊ณผ ์ ๋ชฉ 600
|
|
112
|
+
2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ : ํผ ๋ผ๋ฒจยท์น์
๋ถ์ ๋ชฉ์ด ๋ณธ๋ฌธ ๋๋น ์ฝํด `label` ๊ธฐ๋ณธ ๊ตต๊ธฐ๋ฅผ 500์ผ๋ก ์ ํ๋ค(๋น์ ๋ณธ๋ฌธ 400๊ณผ ์ ๋ชฉ 600 ์ฌ์ด, ์ ๋ชฉ์ด 500์ผ๋ก ๋ด๋ ค๊ฐ ๋ค์๋ 500 ์ ์ง). ์ด์ ์๋ ํ ํฐ์ด 600์ด์์ง๋ง ํ๋กํ ์๋ Text๋ 400์ผ๋ก ๊ทธ๋ ธ๋ค. ๋ renderer๋ `resolveTextDefaultWeight`(`src/component-recipes.ts`) ํ๋๋ก ๊ธฐ๋ณธ ๊ตต๊ธฐ๋ฅผ ๊ณ ๋ฅธ๋ค.
|
|
113
113
|
|
|
114
114
|
## StatusText
|
|
115
115
|
|
|
@@ -189,3 +189,5 @@ Native Android๋ `accessibilityLiveRegion`๋ง ์ฌ์ฉํ๋ค. iOS๋ ์ฑ์ด activ
|
|
|
189
189
|
๋์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งค ๋ ๋ ๋ค์ ์๋ฆฌ๊ธฐ ์ํด key๋ฅผ ๋ฐ๊พธ์ง ์๋๋ค. ToastยทNotice์์ ์ด๋ฏธ ์๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ณต ์๋ฆฌ์ง ์๋๋ค.
|
|
190
190
|
Showcase์ `PatternStatus`๋ ์ด ๊ณต๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ด๋ถ ๋ณ์นญ์ผ ๋ฟ์ด๋ฉฐ ์ ํ์์ Showcase ํ์ผ์ importํ์ง ์๋๋ค.
|
|
191
191
|
DOM ์์ฑยทNative host ํธ์ถ ๊ฒ์ฌ๋ ์ค์ VoiceOverยทTalkBack์ ๋ญ๋
ํ์ธ๊ณผ ๊ตฌ๋ถํ๋ค.
|
|
192
|
+
- 2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ ("์ ํฐํธ๊ฐ ์งํด"): ์ ๋ชฉ์ 600์ผ๋ก ๋ด๋ฆฐ ๋ค์๋ `strong`์ด 700์ด๋ผ ์ฝ์ง ์์ ์๋ฆผ ์ ๋ชฉยท๋ผ๋ฒจ 25๊ณณ์ด ์ ๋ชฉ๋ณด๋ค ๊ตต์๋ค. ๊ฐ์กฐ ๋จ๊ณ๋ฅผ 400ยท500ยท600์ผ๋ก ๋ฎ์ท๋ค.
|
|
193
|
+
- ๊ฐ์ ๋ ๋ ๋ฒ์งธ ๊ฒฐ์ ("๊ตต๊ธฐ ์ข๋ ์ค์ฌ"): ์ ๋ชฉ์ 500, ํฐ ์ ๋ชฉ(level1ยท2)์ 600์ผ๋ก ํ ๋จ๊ณ์ฉ ๋ ๋ฎ์ท๋ค. `strong`์ ์ ๋ชฉ ๊ตต๊ธฐ๋ฅผ ๋ฐ๋ผ 500์ด ๋์ด `medium`๊ณผ ๊ฐ๋ค(`typography.title.fontWeight` ์ฐธ์กฐ). 600์ ํฐ ์ซ์ยท์ ํ ์ํ์๋ง ์ด๋ค(ํฐ ์ ๋ชฉ 600 ๋จ๊ณ๋ ๊ฐ์ ๋ ํฐ ๊ธ์ ๋จ๊ณ์ ํจ๊ป ํ์ง).
|
|
@@ -84,7 +84,7 @@ import { Timeline } from "@hjmds/react-native/data-display";
|
|
|
84
84
|
| --- | --- | --- |
|
|
85
85
|
| ํฌ๊ธฐ | ๊ฐ ํญ๋ชฉ์ [๋ ์ผ 16][๋ณธ๋ฌธ] ๋ ์ด. ๋ ์ผ์ ์ง๋ฆ 10์ dot๊ณผ ๋ค์ ํญ๋ชฉ๊น์ง ์ด์ด์ง๋ 1px connector. ํญ๋ชฉ์ ๋๋ฅผ ์ ์์ด ํฐ์น ์์ญ ์๊ตฌ๊ฐ ์๊ณ ํ ์์ ๋ฒํผ์ ๋ฃ์ง ์๋๋ค | `timelineRecipe`, `.hjm-timeline__item`ยท`__dot`ยท`__connector` |
|
|
86
86
|
| ๊ฐ๊ฒฉ | ํญ๋ชฉ ์ฌ์ด `spacing.md` 16, ๋ ์ผ๊ณผ ๋ณธ๋ฌธ ์ด ๊ฐ๊ฒฉ `spacing.sm` 12, ๋ณธ๋ฌธ ์ค ๊ฐ๊ฒฉ `spacing.xxs` 4 | `timelineRecipe.gap`, `.hjm-timeline*` |
|
|
87
|
-
| ์์ยท์ ๋ ฌ | ๋ณธ๋ฌธ์ labelยทtimestamp ์ค โ description. Web์ label๊ณผ timestamp๋ฅผ ํ ์ค ์ ๋์
|
|
87
|
+
| ์์ยท์ ๋ ฌ | ๋ณธ๋ฌธ์ labelยทtimestamp ์ค โ description. Web์ label๊ณผ timestamp๋ฅผ ํ ์ค ์ ๋์ ๋๋ค. dotยทlabel ์ฒซ ์คยทtimestamp๋ label ์ฒซ ์ค(`body` ์ค ๋์ด)์ ๊ฐ์ด๋ฐ์ ๋ง์ถ๋ค(Web `1lh`, Native ํ ํฐร๊ธ์ ๋ฐฐ์จ). label์ด ์ฌ๋ฌ ์ค์ด๋ฉด dotยทtimestamp๋ ์ฒซ ์ค ์์ ๋จ๋๋ค | `.hjm-timeline__heading`ยท`__dot`ยท`__timestamp`, Native `Timeline` |
|
|
88
88
|
| ๊ณ ์ ยท์คํฌ๋กค | ๋ณธ๋ฌธ ์คํฌ๋กค ์์ญ ์์ ํ ์น์
์ผ๋ก ํญ์ ๊ฝ ์ฑ์ด๋ค. ๋ ๋ถ๋ฌ์ค๊ธฐ๋ Timeline ์๋์ [LoadMore](load-more.md) | โ |
|
|
89
89
|
| ์ข์ ํญยทํฐ ๊ธ์ | Web์ ์ข์ผ๋ฉด timestamp๊ฐ ๋ค์ ์ค๋ก ๋ด๋ ค๊ฐ๋ค(`flex-wrap`). ํฐ ๊ธ์์์๋ ๊ธ์ ์๋ฅด์ง ์๋๋ค | `.hjm-timeline__heading`ยท`__label` |
|
|
90
90
|
|
|
@@ -103,3 +103,7 @@ import { Timeline } from "@hjmds/react-native/data-display";
|
|
|
103
103
|
| ๊ตฌ์กฐ | `<ol>` / `<li>`, dotยทconnector `aria-hidden` | `View` ํ, railยท๋ณธ๋ฌธ์ ์ ๊ทผ์ฑ ํธ๋ฆฌ์์ ์จ๊น |
|
|
104
104
|
| ํญ๋ชฉ ์ ๊ทผ ์ด๋ฆ | `<li aria-label={accessibleName}>` | `accessibleName, timestamp, description`์ ์ด์ด ๋ถ์ธ `accessibilityLabel` |
|
|
105
105
|
| ref | `HTMLOListElement`๋ก ์ ๋ฌ | ์์(ํจ์ ์ปดํฌ๋ํธ) |
|
|
106
|
+
|
|
107
|
+
## ๊ทผ๊ฑฐ
|
|
108
|
+
|
|
109
|
+
- ์ฒซ ์ค ๊ฐ์ด๋ฐ: 2026-10-17 ์ ๋ ฌ ์ค์ธก(Web 402). dot 396 ยท label 397 ยท timestamp 398.5๋ก ์ด๊ธ๋ฌ๋ค(dot์ 4px ๊ณ ์ ์ฌ๋ฐฑ, timestamp๋ ์์ ๊ธ์๊ฐ ๊ธฐ์ค์ ์ ๊ณต์ ). Native๋ dot์ด ๋งจ ์์ ๋ถ์๋ค. ์์ ํ Web 402ยท1280์์ ์ธ ์์๊ฐ 397/397/397, 377/377/377๋ก ์ธก์ ๋๋ค.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
- ์ํ: ๋ฐฐํฌ
|
|
5
5
|
- ์ง์: Web ยท Native
|
|
6
6
|
- ์ ์ฉ: 1.12.1
|
|
7
|
-
- ๊ฒํ ์ผ: 2026-10-
|
|
7
|
+
- ๊ฒํ ์ผ: 2026-10-17
|
|
8
8
|
- ๊ทผ๊ฑฐ: [Toast](../../toast.md), [Liquid Toast](../../../../react-native/docs/liquid-toast.md), `src/component-recipes.ts`(`toastRecipe`)
|
|
9
9
|
- ์คํ ๋ฆฌ๋ถ: `๋ฐฐํฌ/์ปดํฌ๋ํธ/์ํ์ ์๋ฆผ/ํ ์คํธ`, `๋ฐฐํฌ/์ปดํฌ๋ํธ/์ํ์ ์๋ฆผ/๋ฆฌํด๋ ํ ์คํธ`, `๋ฐฐํฌ/๊ตฌ์ฑ/ํผ๋๋ฐฑ๊ณผ ๋ณต๊ตฌ/๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ํ`
|
|
10
10
|
|
|
@@ -119,6 +119,8 @@ Native์ ์ ํํ `/toast-liquid`๋ ๊ฐ์ฅ ๊ฐ๊น์ด ํ๋กํ์ `radius.xl`
|
|
|
119
119
|
| ํญ๋ชฉ | ๊ฐ | ๊ทผ๊ฑฐ |
|
|
120
120
|
| --- | --- | --- |
|
|
121
121
|
| ํฌ๊ธฐ | ์นด๋ ์ต๋ ํญ 420(Web `min(420px, 100vw โ 2รspacing.md)`, Native ํ๋ฉด ํญ โ ์์ ์์ญ โ 2ร16์์ 420์ผ๋ก ์๋ฆ). ์ต์ ๋์ด 56(`layout.rowHeight.singleLine`). ๋ชจ์๋ฆฌ `radius.xl` 24(ํจ๋, ๋ฏธ๊ฒ์ 1.17.2 ์ดํ. ๊ทธ์ `lg` 16). ์ด์ [์์ด์ฝ ๋ฐฐ์ง 32 ๋๋ `media` 44][๋ฌธ๊ตฌ][๋ซ๊ธฐ 44]. `action`์ ๋์ด 44(`control.minTouchTarget`), ์ข์ฐ ์ฌ๋ฐฑ `spacing.md` 16์ pill. `progress` ์ 6(ํ์ฌ ๋จ๊ณ 1.4๋ฐฐ) | `toastRecipe.viewport`ยท`surface`ยท`icon`ยท`action`, `.hjm-toast`, `react-native/src/feedback.tsx` |
|
|
122
|
+
| ์์ชฝ ์ฌ๋ฐฑ | ์นด๋ ์์๋ `spacing.sm` 12, ์ข์ฐ ์์ชฝ `spacing.md` 16(`toastRecipe.surface.padding`, ๋ฏธ๊ฒ์). ๋ซ๊ธฐ๋ 44 ํฐ์น ์์ญ์ ์ ์งํ๋ ๋ ์ชฝ์ผ๋ก (44 โ ๊ธ๋ฆฌํ 14)/2 = 15๋งํผ ์ฌ๋ฐฑ์ ๊ฒน์ณ(`close.inlineOverhang`) ร ๊ธ๋ฆฌํ ๋์ด ์นด๋ ๋์์ 16 โ ๋ฐฐ์ง์ ์์ ์ฌ๋ฐฑ 16๊ณผ ๊ฐ๋ค. RTL์์๋ ๋
ผ๋ฆฌ ๋ฐฉํฅ(์์ยท๋)์ผ๋ก ๋์นญ์ด๋ค. `action`ยท`progress`๋ ๋ฌธ๊ตฌ ์ด์ ๋ง์ถ๋ค | `toastRecipe.surface`ยท`close`, `.hjm-toast`ยท`.hjm-toast__close`, `react-native/src/feedback.tsx` |
|
|
123
|
+
| ์ฒซ ์ค ๊ธฐ์ค | ๋ฐฐ์ง 32 ์์(`toastRecipe.anchor.blockSize`)๊ฐ ๊ธฐ์ค์ ์ด๋ค. ์ฒซ ์ค(์ ๋ชฉ, ์์ผ๋ฉด ์ค๋ช
)์ (32 โ ๊ทธ ์ค์ ํ๊ฐ)/2๋งํผ ๋ด๋ ค ๋ฐฐ์ง ๊ฐ์ด๋ฐ์ ๋ง์ถ๊ณ , ๋ซ๊ธฐ๋ ์์๋ โ(44 โ 32)/2 = โ6(`close.blockOverhang`)์ผ๋ก ๊ฐ์ ๊ฐ์ด๋ฐ์ ๋ ์ฑ ํ์ ๋๋ฆฌ์ง ์๋๋ค. ํ ์ค์ด๋ฉด 12 + 32 + 12 = 56์ ๋ฐฐ์งยท๊ธ์ยท๋ซ๊ธฐ ๊ฐ์ด๋ฐ๊ฐ ๋ชจ๋ 28. ์ฌ๋ฌ ์ค์ด๋ฉด ๋ฐฐ์งยท๋ซ๊ธฐ๋ ์ฒซ ์ค ์์ ๋จ๊ณ ๋๋จธ์ง ์ค์ ์๋๋ก ์๋๋ค(๋ฌธ๊ตฌ ๋ฉ์ด๋ฆฌ ์ ์ฒด์ ๊ฐ์ด๋ฐ์ ๋ง์ถ์ง ์๋๋ค). `media` 44๋ ๊ฐ์ ์์ชฝ์์ ์์ํ๊ณ ๊ธฐ์ค ์์๊ฐ ์๋๋ค โ ์ ๋ชฉ์ media ๊ฐ์ด๋ฐ์ ๋ง์ถ๋ฉด ์ค๋ช
์ด ์๋ฐํ ์๋๋ก ๋ฐ๋ ค๋์๋ค. Web์ ์ฒซ ์ค์ `1lh`, Native๋ body ํ ํฐ ํ๊ฐ ร ํ์ฌ ๊ธ์ ๋ฐฐ์จ๋ก ๊ณ์ฐํด ํ๋กํยท๊ธ์ ํ๋์์๋ ๋ง๋๋ค | `toastRecipe.anchor`ยท`close`, `.hjm-toast__content`, `react-native/src/feedback.tsx` |
|
|
122
124
|
| ๊ฐ๊ฒฉ | ํ๋ฉด ๊ฐ์ฅ์๋ฆฌ์์ `spacing.md` 16 + ์์ ์์ญ(`safeAreaMode: "additive"`). ์ฌ๋ฌ ์ฅ ์ฌ์ด `spacing.sm` 12. ์นด๋ ์ ์ด ๊ฐ๊ฒฉ `spacing.sm` 12 | `toastRecipe.viewport`, `.hjm-toast-viewport` |
|
|
123
125
|
| ์์ยท์ ๋ ฌ | ๊ธฐ๋ณธ์ ์๋ ๊ฐ์ด๋ฐ(`placement="bottom"`). ์์ชฝ ๋ฐฐ์น๋ ์์์ ์๋๋ก, ์๋์ชฝ ๋ฐฐ์น๋ ๊ฐ์ฅ์๋ฆฌ๋ถํฐ ์๋ก ์์ธ๋ค. ๋ฌธ๊ตฌ ์ด ์ ์์๋ ์ ๋ชฉ โ ์ค๋ช
โ `progress` โ `action`. `action`์ ๋ฌธ๊ตฌ ์๋ ์์ ์ชฝ(`toastRecipe.action.align` `start`, ๋ฏธ๊ฒ์ 1.17.2 ์ดํ. ๊ทธ์ ๋์งธ ์ค ๋) | `toastRecipe.placements`, `.hjm-toast__action` |
|
|
124
126
|
| ๊ณ ์ ยท์คํฌ๋กค | ํ๋ฉด ํ๋ฆ ๋ฐ์ ๋ ์๋ ์ธต์ด๋ผ ๋ณธ๋ฌธ ๋ ์ด์์์ ์๋ฆฌ๋ฅผ ๋ง๋ค์ง ์๋๋ค. ํ๋จ ๊ณ ์ ๋ฐ(BottomNavigationยทBottomCTA)๊ฐ ์์ผ๋ฉด Web `bottomOffset`(px ๋๋ CSS ๊ธธ์ด), Native `keyboardOffset`์ผ๋ก ๊ทธ ์์ ๋์ด๋ค. Native ์๋์ชฝ ๋ฐฐ์น๋ `avoidKeyboard`(๊ธฐ๋ณธ true)๋ก ํค๋ณด๋ ์์ ์ ๋ค | `react/src/toast.tsx`, `react-native/src/feedback.tsx`(`ToastRegion`) |
|
|
@@ -202,3 +204,10 @@ Native์ ์ ํํ `/toast-liquid`๋ ๊ฐ์ฅ ๊ฐ๊น์ด ํ๋กํ์ `radius.xl`
|
|
|
202
204
|
Web์ ์ ์ฒด ์์ญ์ ํฌ๋ช
ํ button๊ณผ ๋ ์ ์ด ๋ฒํผ์ ํ์ ๋ก, Native๋ ๋ค์ชฝ Pressable๊ณผ ์์ชฝ ์ ์ด ๋ฒํผ์
|
|
203
205
|
๋
๋ฆฝ์ ์ผ๋ก ๋ฐฐ์นํ๋ค. label์ ๋์ ์ด๋ฆ, ์ค๋ช
์ ๊ธฐ์กด ์๋ฆผ ๋ฌธ๊ตฌ์ด๋ฉฐ ๊ธฐ๋ณธ ์นด๋ ๋ฐฐ์น์ ํฌ๊ธฐ๋ ๋ฐ๋์ง ์๋๋ค.
|
|
204
206
|
๋ผ์ฐํฐ๋ HJM์ด ๊ฐ์ ธ์ค์ง ์๊ณ ์ ํ ์ฝ๋ฐฑ์ด ์คํํ๋ค. ํ๋ฉด ์ด๋ ๋ค provider๊ฐ ์์ด์ ธ๋ ์ค๋ณต ์คํํ์ง ์๋๋ค.
|
|
207
|
+
|
|
208
|
+
## ๊ทผ๊ฑฐ
|
|
209
|
+
|
|
210
|
+
2026-10-17 ์ฌ์ฉ์ ์ง์ ("๊ธฐ๋ณธ ํ ์คํธ ์ข์ฐ๋ ๊ธ์ ๋ผ์ธ์ด ์๋ง๋๋ฐ"). Web 402 ํ ์ค ์๋ฆผ์์ ์นด๋ ์์ชฝ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ง ๊ฐ์ด๋ฐ 28, ๊ธ์ 32~33,
|
|
211
|
+
๋ซ๊ธฐ ๊ธ๋ฆฌํ 30์ด ์๋ก ๋ฌ๋๊ณ (๋ฐฐ์ง `start`ยท๋ฌธ๊ตฌ `center`ยท๋ซ๊ธฐ `start`โ4์ ์ธ ์ ๋ ฌ), ์์ ์ฌ๋ฐฑ 16๊ณผ ๋ซ๊ธฐ ๊ธ๋ฆฌํ ๋ ์ฌ๋ฐฑ 22๊ฐ ๋น๋์นญ์ด์๋ค
|
|
212
|
+
(์ฌ๋ฐฑ 12/8/12/16 ์์ 44 ํฐ์น ์์ญ). Native๋ ์ฌ๋ฐฉ 16 ์ฌ๋ฐฑ๊ณผ ๋ฌธ๊ตฌ `center` ์ ๋ ฌ๋ก ๋ฐ๋ก ์ด๊ธ๋ฌ๋ค. ์ฒซ ์ค ๊ธฐ์ค๊ณผ ๋์นญ ์ฌ๋ฐฑ์ recipe ๊ฐ์ผ๋ก ๋๊ณ
|
|
213
|
+
๋ renderer๊ฐ ๊ฐ์ ๊ฐ์ ์ฝ๊ฒ ๋ฐ๊ฟจ๋ค. ์์ ํ ํ ์คยท์ฌ๋ฌ ์คยทactionยทmediaยทRTL ๋ชจ๋ ๊ฐ์ด๋ฐ 28(ํ
๋๋ฆฌ ํฌํจ 29), ์์ชฝ ์ฌ๋ฐฑ 16์ผ๋ก ์ธก์ ๋๋ค.
|
|
@@ -86,7 +86,7 @@ NavigationBar์ Native ํ๋ ์ ๋ชจ์๋ฆฌ๋ Provider์ `tokens.radius.xl`์
|
|
|
86
86
|
| ํญ๋ชฉ | ๊ฐ | ๊ทผ๊ฑฐ |
|
|
87
87
|
| --- | --- | --- |
|
|
88
88
|
| ํฌ๊ธฐ | ์ต์ ๋์ด `control.buttonHeight.large` 52 + ์์ชฝ ์์ ์์ญ. Web์ `max(env(safe-area-inset-top), safeAreaTop)`์ ์ ์ฌ๋ฐฑ์ผ๋ก, Native๋ `safeAreaTop`์ `paddingTop`๊ณผ `minHeight`(52 + `safeAreaTop`)์ ๋ํ๋ค. ์ข์ฐ ์ด ์ต์ ํญ `control.minTouchTarget` 44, Native `TopBarAction` ์ต์ 44ร44 | `topBarRecipe.minHeight`ยท`sideMinWidth`ยท`action`, `.hjm-top-bar` |
|
|
89
|
-
| ๊ฐ๊ฒฉ | ์ข์ฐ ์ฌ๋ฐฑ `spacing.md` 16, ์ฌ๋กฏ ์ฌ์ดยท์ฌ๋กฏ ์ ํ๋ ์ฌ์ด `spacing.xs` 8. `TopBarAction` ์์ด์ฝโ๋ผ๋ฒจ `spacing.xxs` 4, ์ข์ฐ ์ฌ๋ฐฑ 4. ๋ฐฐ๊ฒฝ `canvas` | `topBarRecipe.paddingHorizontal`ยท`gap`ยท`action` |
|
|
89
|
+
| ๊ฐ๊ฒฉ | ์ข์ฐ ์ฌ๋ฐฑ `spacing.md` 16, ์ฌ๋กฏ ์ฌ์ดยท์ฌ๋กฏ ์ ํ๋ ์ฌ์ด `spacing.xs` 8. `NavigationBar`๋ ๋ฐ ์์ชฝ ์ฌ๋ฐฑ `spacing.sm` 12๋ฅผ ๋ธ๋๋ ์์๊ณผ ๋ ํ๋์ ๋๊ฐ์ด ์ฐ๊ณ ๋ธ๋๋์ ๋ณ๋ inset์ ๋์ง ์๋๋ค(WebยทNative). `TopBarAction` ์์ด์ฝโ๋ผ๋ฒจ `spacing.xxs` 4, ์ข์ฐ ์ฌ๋ฐฑ 4. ๋ฐฐ๊ฒฝ `canvas` | `topBarRecipe.paddingHorizontal`ยท`gap`ยท`action` |
|
|
90
90
|
| ์์ยท์ ๋ ฌ | ์ธ ์ด: `leading`(๋ค๋กยท๋ซ๊ธฐ) ยท ์ ๋ชฉ ยท `actions`(๋ ์ ๋ ฌ). `centered`(๊ธฐ๋ณธ `true`)๋ ๋จ์ ์ ๋ชฉ ์์ญ ์์์ ๊ฐ์ด๋ฐ ์ ๋ ฌ. ์ผ์ชฝ ์ ๋ ฌ์ `centered={false}`๋ก ๊ณ ๋ฅธ๋ค. ํ๋์ 1~2๊ฐ๋ง ๋ ์ด์, ๋์น๋ฉด ํ๋๋ง ๋จ๊ธฐ๊ณ [Menu](menu.md)๋ก ๋ฌถ๋๋ค. ์ฃผ ํ๋(์ ์ฅยท์๋ฃ)์ ๋ ์ด์ ๋ง์ง๋ง | `.hjm-top-bar` grid, Native `TopBar` |
|
|
91
91
|
| ๊ณ ์ ยท์คํฌ๋กค | ํ๋ฉด ๋งจ ์, ์คํฌ๋กค ์์ญ **๋ฐ**์ ๋๋ค. TopBar ์์ฒด๋ `position: sticky`/๊ณ ์ ์ ๊ฑธ์ง ์์ผ๋ฏ๋ก ํ๋ฉด ๊ณจ๊ฒฉ์ด ๊ทธ ์๋์ ์คํฌ๋กค ์์ญ์ ๋ฌ์ผ ๊ณ ์ ๋๋ค. ๋ฐ๋ก ์๋ ๋ณธ๋ฌธ ์ฒซ ๋ธ๋ก์ [Top](top.md) | `.hjm-top-bar`(position ์์) |
|
|
92
92
|
| ์ข์ ํญยทํฐ ๊ธ์ | ๊ธ์ ๋ฐฐ์จ โฅ `largeTextThreshold` 1.6: Web์ ์ฒซ ํ leadingยทํ๋, ๋์งธ ํ ์ ๋ชฉ(์์ ์ ๋ ฌ, ์์๋ `spacing.xs` 8). Native๋ ์ฒซ ํ leading+์ ๋ชฉ, ๋์งธ ํ ํ๋(๋ ์ ๋ ฌ, ์ค๋ฐ๊ฟ ํ์ฉ) | `.hjm-top-bar[data-large-text]`, `react-native/src/navigation.tsx` `TopBar` |
|
|
@@ -130,3 +130,7 @@ NavigationBar์ Native ํ๋ ์ ๋ชจ์๋ฆฌ๋ Provider์ `tokens.radius.xl`์
|
|
|
130
130
|
`title`, `subtitle`, `titleLeading`, ์ ๋ชฉ ํด๋ฆญ/์ ๊ทผ์ฑ props์ ํจ๊ป ์ฐ์ง ์๋๋ค.
|
|
131
131
|
์คํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ํผ์นจ ์นฉ์ ์ฑ์ด ์์ฒด ํค๋๋ก ๋ค์ ์กฐ๋ฆฝํ๋ ๋ฌธ์ ๋ฅผ ์์ ๊ธฐ ์ํด ์ถ๊ฐํ๋ค.
|
|
132
132
|
์์ ๊ธฐ์กด provider์ ๋ธ๋๋/semantic palette ๋ฒ์๋ก ์ฐ๊ฒฐํ๋ค.
|
|
133
|
+
|
|
134
|
+
## ๊ทผ๊ฑฐ
|
|
135
|
+
|
|
136
|
+
- NavigationBar ์๋ ์ฌ๋ฐฑ: 2026-10-17 ์ ๋ ฌ ์ค์ธก(Web 1280). ๋ธ๋๋์ `spacing.xs` 8์ด ๋ํด์ ธ ์์ 21, ๋ ํ๋ 13์ผ๋ก ๋น๋์นญ์ด์๋ค. Native ๋ธ๋๋์๋ ์ถ๊ฐ inset์ด ์์๋ค. Web ๋ธ๋๋ inset์ ์์ค ๋ค ์๋ 13/13์ผ๋ก ์ธก์ ๋๋ค.
|
|
@@ -90,6 +90,6 @@ import { Top } from "@hjmds/react-native/top";
|
|
|
90
90
|
|
|
91
91
|
### ํ๋กํ ๋ชจ์๋ฆฌยท์ ๋ชฉ ์๋น
|
|
92
92
|
|
|
93
|
-
2026-10-07 ์๋น ๊ฐ์ฌ์์ ๋ renderer์ ์ ๋ชฉ ํฌ๊ธฐยทํ๊ฐยท๊ตต๊ธฐ๊ฐ foundation์ผ๋ก ํ์ ๋ recipe๋ฅผ ์ง์ ์ฝ์ด ํ๋กํ์ ์ฐํํ๋ค. `large`๋ ๊ฐ๊น์ด ํ๋กํ์ `heading.level2
|
|
93
|
+
2026-10-07 ์๋น ๊ฐ์ฌ์์ ๋ renderer์ ์ ๋ชฉ ํฌ๊ธฐยทํ๊ฐยท๊ตต๊ธฐ๊ฐ foundation์ผ๋ก ํ์ ๋ recipe๋ฅผ ์ง์ ์ฝ์ด ํ๋กํ์ ์ฐํํ๋ค. `large`๋ ๊ฐ๊น์ด ํ๋กํ์ `heading.level3`(24, 2026-10-17 ํฐ ๊ธ์ ๋จ๊ณ ํ์ง ์ ์๋ `level2` 32), `medium`์ `typography.titleLarge`๋ฅผ ์ฝ๊ณ ํ๋กํ์ด ์์ผ๋ฉด ๊ธฐ์กด recipe๋ฅผ ์ ์งํ๋ค. ์๊ฐ ์ญํ ์ `headingLevel`๊ณผ ๋
๋ฆฝ์ด๋ฉฐ display ์์ฒดยท์ ๋ชฉ ์๋ฏธยท๋ณด์กฐ ํ๋ยท์ด์ ์ ๋ฐ๊พธ์ง ์๋๋ค.
|
|
94
94
|
|
|
95
95
|
ํ๋กํ ์ฐ๊ฒฐ์ 1.16.0 ๋ณ๊ฒฝ์ด๋ฉฐ, ๊ธฐ๋ณธ ๋ฐฐํฌ ๊ณ์ฝ๊ณผ ์ค์ Native ๊ธฐ๊ธฐ ๊ฒ์ฆ์ ๊ตฌ๋ถํ๋ค.
|
|
@@ -78,7 +78,7 @@ import { UploadItem } from "@hjmds/react-native/upload-item";
|
|
|
78
78
|
| --- | --- | --- |
|
|
79
79
|
| ํฌ๊ธฐ | ์ต์ ๋์ด `layout.rowHeight.twoLine` 68, ์์๋ ์ฌ๋ฐฑ `row.paddingVertical` `spacing.xs` 8(๋ ํ๋ซํผ). ํ๋ ๋ฒํผ ์ต์ 44ร44. ํ
๋๋ฆฌ 1px, `radius.md` 12์ธ ์นด๋ ๋ชจ์ | `uploadItemRecipe.row`, `.hjm-upload-item`, `react-native/src/upload-item.tsx` |
|
|
80
80
|
| ๊ฐ๊ฒฉ | ์์ ์ฌ์ด `spacing.sm` 12, ์ข์ฐ ์ฌ๋ฐฑ `spacing.md` 16. ํ ์ฌ์ด ๊ฐ๊ฒฉยท๋ชฉ๋ก ํ์ ์ ํ์ด ์ ํ๋ค(HJM ๋ชฉ๋ก ๋ ์ด์์ ์์) | `uploadItemRecipe.row` |
|
|
81
|
-
| ์์ยท์ ๋ ฌ | `leading`(์์ด์ฝยท์ธ๋ค์ผ) โ ์ด๋ฆยท๋ฉํยท์งํ/์ํ โ ๋์ ํ๋ ๋ฒํผ(์ทจ์ยท์ฌ์๋). ์ฌ๋ฌ ๊ฐ๋ฉด ๊ณ ๋ฅธ ์์๋๋ก ์ธ๋ก๋ก ์๋๋ค | `react/src/upload-item.tsx`, `.hjm-upload-item__action`(margin-inline-start: auto) |
|
|
81
|
+
| ์์ยท์ ๋ ฌ | `leading`(์์ด์ฝยท์ธ๋ค์ผ) โ ์ด๋ฆยท๋ฉํยท์งํ/์ํ โ ๋์ ํ๋ ๋ฒํผ(์ทจ์ยท์ฌ์๋). ์ฌ๋ฌ ๊ฐ๋ฉด ๊ณ ๋ฅธ ์์๋๋ก ์ธ๋ก๋ก ์๋๋ค ๋ ํ๋ ๋ฒํผ์ `edge="end"`๋ผ ์์ด์ฝ ์นธ์ด ๋ ์ฌ๋ฐฑ 16์ ์์ ์์ ์ชฝ ์ด๋ฆ ์ฌ๋ฐฑ๊ณผ ๊ฐ๋ค(Web 26 โ 16, Native ์ฝ 33 โ 16). Native ์์ด์ฝ์ ๊ธ๊ผด "ร"ยท"โป" ๋์ ๊ทธ๋ฆฐ closeยทrefresh๋ก ๋ฒํผ ๊ฐ์ด๋ฐ์ ์จ๋ค(์ ์๋ ์นด๋ ๊ฐ์ด๋ฐ๋ณด๋ค ์ฝ 5 ์๋, 2026-10-17 ์ค์ธก ๊ฐ์ฌ, [IconButton `edge`](icon-button.md#๋ฐฐ์น)) | `react/src/upload-item.tsx`, `.hjm-upload-item__action`(margin-inline-start: auto) |
|
|
82
82
|
| ๊ณ ์ ยท์คํฌ๋กค | ํ์ผ์ ๊ณ ๋ฅด๋ [FilePicker](file-picker.md) ๋ฐ๋ก ์๋, ๋ณธ๋ฌธ๊ณผ ํจ๊ป ์คํฌ๋กค | โ |
|
|
83
83
|
| ์ข์ ํญยทํฐ ๊ธ์ | Web์ ๋ณธ๋ฌธ ๋ธ๋ก์ด 14rem ์๋๋ก ์ค๋ฉด ํ๋ ๋ฒํผ์ด ๋ค์ ์ค ๋์ผ๋ก ๋ด๋ ค๊ฐ๋ค. Native๋ ํ ์ค์ ์ ์งํ๊ณ ์ด๋ฆ์ด ์ค๋ฐ๊ฟ๋๋ค | `.hjm-upload-item__body`(flex: 1 1 14rem), `.hjm-upload-item`(flex-wrap) |
|
|
84
84
|
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
| ์์ญ | ์ปดํฌ๋ํธ | ์์น | ํฌ๊ธฐยท๊ฐ๊ฒฉ |
|
|
34
34
|
| --- | --- | --- | --- |
|
|
35
35
|
| ๋ฐ๊นฅ ํ | Stack. Web์ ์ ํ ํ๋ฉด์ `Container size="reading"` ์ | ํ๋ฉด์ ๋ณธ๋ฌธ ํ๋ฆ | gap md=16px, ํญ์ Container๋ฅผ ๋ฐ๋ฅธ๋ค(Web ์ต๋ `layout.readingMaxWidth` 720) |
|
|
36
|
-
| ํจ๋ ์ ๋ชฉ | `Heading level="level5"` | ํจ๋ Surface ๋งจ ์ | `title` ๊ธ์ ํฌ๊ธฐยท
|
|
36
|
+
| ํจ๋ ์ ๋ชฉ | `Heading level="level5"` | ํจ๋ Surface ๋งจ ์ | `title` ๊ธ์ ํฌ๊ธฐยทmedium(500) |
|
|
37
37
|
| ๋ด์ฉ | ํด๋น ๊ณต๊ฐ API | ์
๋ ฅ๊ณผ ํ๋ ์ฌ์ด | ์์ฒด recipe ํฌ๊ธฐ, ์ค๋ฐ๊ฟ ํ์ฉ |
|
|
38
38
|
| ํ๋ | Button/๊ธฐ์กด ์ปจํธ๋กค | ๊ด๋ จ ํญ๋ชฉ ๋ฐ๋ก ๋ค | inline์ผ ๋ wrap, md=16px |
|
|
39
39
|
|
|
@@ -82,3 +82,7 @@ Storybook์ ๊ธฐ์กด gutter ๋๋ฌธ์ contentInset=none์ ์ฐ๊ณ , ๋ง์ง๋ง ์
|
|
|
82
82
|
์คํฌ๋กค ๊ฒฝ๊ณ์ ๊ฑธ๋ฆฌ์ง ์๋๋ก ๋ณธ๋ฌธ ๋์ spacing.md(16) ์ฌ๋ฐฑ์ ๋๋ค.
|
|
83
83
|
๋ณธ๋ฌธ ์กฐํฉ ์์ฒด์ ๋ ๋ฒ์งธ scroll view๋ฅผ ๋ง๋ค์ง ๋ง๊ณ ์ ํ์ ๊ธฐ์กด ํ๋ฉด host๋ฅผ ์ฌ์ฌ์ฉํ๋ค.
|
|
84
84
|
KeyboardAvoiding์ ์๋ ์ฌ๋ฐฑ์ ์ ๊ณตํ๋ฉฐ ํฌ์ปค์ค๋ ํ๋๋ฅผ ์๋ ํ์ํ๋ API๋ ์๋๋ค.
|
|
85
|
+
|
|
86
|
+
## ๊ทผ๊ฑฐ
|
|
87
|
+
|
|
88
|
+
2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ ("๊ตต๊ธฐ ์ข๋ ์ค์ฌ"): ๋ชจ๋ ๊ธ์ ๊ตต๊ธฐ๋ฅผ ํ ๋จ๊ณ ๋ฎ์ท๋ค. ํฐ ์ซ์ยท์ ํ ์ํ 600(ํฐ ์ ๋ชฉ ๋จ๊ณ๋ ๊ฐ์ ๋ ํ์ง), ์ ๋ชฉยท๊ฐ์กฐ 500, label 500, ๋ณธ๋ฌธ 400์ด๋ฉฐ ์ ๋ณธ์ [ํ์ดํฌ๊ทธ๋ํผ](../tokens/typography.md)๋ค.
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
| ์์ ์๊ฐ | DurationField | ์ค๋ช
์๋ | NumberField ์ธ ์นธ, ์นธ ์ฌ์ด `spacing.md` 16. ์ธ ์นธ์ด ๋ชจ๋ ๋ค์ด๊ฐ๋ฉด ํ ์ค(์นธ ์ต๋ `fieldGroupRecipe.inline.maxWidth`), ์๋๋ฉด ์ธ ์นธ ๋ชจ๋ ์ธ๋ก([FieldGroup](field-group.md)) |
|
|
65
65
|
| ํ์ธ | InlineConfirm | ํธ๋ฆฌ๊ฑฐ ์๋ฆฌ ๊ทธ๋๋ก | ํธ๋ฆฌ๊ฑฐ์ ํ์ธ ํ๋์ด ๊ฐ์ ์๋ฆฌ, Button ๋์ด 44, ์ง๋ฌธยท๋ฒํผ ์ค ์ฌ์ด์ ๋ ๋ฒํผ ์ฌ์ด `spacing.sm` 12 |
|
|
66
66
|
| ๋ฐ์ | ReactionPicker | ์ ๋ชฉ ์๋ | `ghost` `pill` Button ๋ฌถ์, ์ฌ์ด `spacing.xs` 8, ๋์น๋ฉด ์ค๋ฐ๊ฟ |
|
|
67
|
-
| ์๋ฆผ ์ข
| NotificationBell | ๋ธ๋ก ๋งจ ์, ์์ ์ชฝ
|
|
67
|
+
| ์๋ฆผ ์ข
| NotificationBell | ๋ธ๋ก ๋งจ ์, ์์ ์ชฝ ์ ๋ ฌ. TopBarยทํค๋ ๋์ ๋ ๋๋ `edge="end"` | IconButton(๊ธฐ๋ณธ `medium` 44) + CounterBadge `floating`(๋ยท์ ๋ชจ์๋ฆฌ). `edge`(`start`ยท`end`ยท`both`)๋ IconButton `edge`์ ๊ฐ์ ๊ฐ(`resolveIconButtonEdgeOverhang`, 44โ24)/2 = 10์ ๋ฒจ ๋ฃจํธ์ ์ ์ฉํด glyph ์นธ์ด ์ฌ๋ฐฑ ์ (TopBar 16)์ ์ค๊ณ ๋ฐฐ์ง๋ ์์ด์ฝ ๋ชจ์๋ฆฌ๋ฅผ ์งํจ๋ค |
|
|
68
68
|
|
|
69
69
|
## ํ๋ฆ๊ณผ ์ํ
|
|
70
70
|
|
|
@@ -197,4 +197,5 @@ function CompoundBlocks() {
|
|
|
197
197
|
|
|
198
198
|
## ๊ทผ๊ฑฐ
|
|
199
199
|
|
|
200
|
+
- NotificationBell `edge`: 2026-10-17 1.27.2 ์ฑํ ์ ๊ฒ. Spint ํยทํ์ TopBar ๋์ ๋ฒจ์ IconButton์ ๊ฐ์ธ์ง๋ง `edge`๊ฐ ์์ด glyph ์นธ์ด ๋ฐ ๋์์ 26์ ๋์๋ค(Web 402ยท1280, LTRยทRTL ์ธก์ 26 โ 16, Native 3x ํ๋ ์: ๋ฒํผ ๋ 386 ๊ธฐ์ค 15.7). ๋์นจ์ ์์ชฝ ๋ฒํผ์ด ์๋๋ผ ๋ฒจ ๋ฃจํธ์ ์ค๋ค. ๋ฒํผ์ ์ฃผ๋ฉด ๋ฃจํธ๊ฐ 10 ์ค์ด ๋์ ๋ถ์ ๋ฐฐ์ง๊ฐ ์์ด์ฝ์์ 10 ์์ชฝ์ผ๋ก ๋ฐ๋ฆฐ๋ค(์ธก์ : ๋ฐฐ์ง ๋ โ ๋ฒํผ ๋ 0 ์ ์ง).
|
|
200
201
|
- 2026-10-17 ๊ตฌ์ฑ ๋ฆฌ๋ทฐ: ์์ ์๊ฐ ์นธ์ด ๋ฐ์คํฌํฑ์์ ๋์ด๋๊ณ ์ข์ ํญ์์ ํ ์นธ๋ง ๋ค์ ์ค๋ก ๋๊ฒจ FieldGroup recipe์ inline ๊ท์น์ ๋ฐ๊ฟจ๋ค.
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
| ํ
๋ง | ๋ฐ์ ๋ชจ๋์์ ๋ณด์ด๋ ์ฐจ์ด |
|
|
64
64
|
| --- | --- |
|
|
65
65
|
| ๋ฏธ๋๋ฉ | ํฐ ๋ฐํยท๋ฌด์ฑ์ hairline, ๊ทธ๋ฆผ์ ์์, ๊ตต๊ธฐ 500 ์ ๋ชฉ๊ณผ ๋๋ํ ํ๊ฐ, ๋์ ์์ชฝ ์ฌ๋ฐฑ์ ํ
๋๋ฆฌ ์นด๋(cards) |
|
|
66
|
-
| ์๋ํ ๋ฆฌ์ผ | ์์คํ
serif
|
|
66
|
+
| ์๋ํ ๋ฆฌ์ผ | ์์คํ
serif ์ ๋ชฉยท๋ณธ๋ฌธ(์ ๋ชฉ ํฌ๊ธฐ๋ ๊ณตํต ๋จ๊ณ, 2026-10-17 56/42/30px ํ๋ ์ ๋ชฉ ํ์ง), ๋ฐ๋ปํ ์ํฌ์๊ณผ ์์ธ ๊ฐ์กฐ, ๊ฐ์ง ๋ชจ์๋ฆฌ, ๊ท์น์ ์ผ๋ก ๋๋ rows |
|
|
67
67
|
| ํฐ๋ฏธ๋ | ๋ชจ๋ ๊ธ์ monospace, ๋ชจ์๋ฆฌ 0, ๊ทธ๋ฆผ์ ์์, ๋
นํ์ ๋ฐํยท์ง์ ๋
น์ ํ๋ยทํธ๋ฐ์ ๊ฐ์กฐ, ๊ท์น์ rows. ์ด๋์ด ๋ชจ๋๋ ๊ฒ์ ์ฝ์ |
|
|
68
68
|
|
|
69
69
|
## ํ๋ฆ๊ณผ ์ํ
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
| ์ปดํฌ๋ํธ | ์ญํ | ์ง์นจ |
|
|
21
21
|
| --- | --- | --- |
|
|
22
22
|
| `Container` ยท `ScrollView` | ์์ ํ๋ฉด์ ๋ฐ๊นฅ ํ. HJM ํ๋ฉด ๊ณจ๊ฒฉ์ด ์์ ํ๋ค | [Container](../components/container.md), [ํ๋ฉด ์ฌ๋ฐฑ](../tokens/layout.md) |
|
|
23
|
-
| `Heading level="level3"`, `Text` | ์์ ํ๋ฉด์ ์ ๋ชฉยท์ค๋ช
. ํ๋ฉด ์ ๋ชฉ์
|
|
23
|
+
| `Heading level="level3"`, `Text` | ์์ ํ๋ฉด์ ์ ๋ชฉยท์ค๋ช
. ํ๋ฉด ์ ๋ชฉ์ medium(500) `level3`(24, HJM ๊ธ์ ์ํ)์ด๋ค | [Heading](../components/heading.md), [Text](../components/text.md) |
|
|
24
24
|
| `Button` primary | ์ํธ๋ฅผ ์ฌ๋ ํธ๋ฆฌ๊ฑฐ(์์ ํ๋ฉด์ ์ฃผ ํ๋) | [Button](../components/button.md) |
|
|
25
|
-
| `Sheet` | ํ๋จ ์ํธ.
|
|
25
|
+
| `Sheet` | ํ๋จ ์ํธ. ์ ๊ทผ์ฑ ์ด๋ฆ(`title`, ๋ณด์ด์ง ์์)ยท๋ซ๊ธฐยท`footer`, ์์ ์์ญยท์คํฌ๋กคยท`busy` | [Sheet](../components/sheet.md) |
|
|
26
26
|
| `Steps` | ํ์ฌ ๋จ๊ณ์ ์ ์ฒด ๋จ๊ณ ์, ์คํจํ๋ฉด ํ์ฌ ๋จ๊ณ `error` | [Steps](../components/steps.md) |
|
|
27
27
|
| `ContentTransition preset="slide"` | ๋จ๊ณ ๋ณธ๋ฌธ ๊ต์ฒด | [ContentTransition](../components/content-transition.md) |
|
|
28
28
|
| `Heading level="level3"`, `Text` | ๋จ๊ณ ๋ณธ๋ฌธ | [Heading](../components/heading.md), [Text](../components/text.md) |
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
| ๋ฐ๊นฅ ํ | ์์ ํ๋ฉด: Web ๋ฌธ์ ์คํฌ๋กค > `Container size="reading"`, Native `ScrollView` > `Container size="reading"`. ์ํธ: `Sheet`๊ฐ Modal๋ก ํ๋ฉด ์์ ๋จ๋ฉฐ ์คํฌ๋กคยท์์ ์์ญยทํค๋ณด๋๋ฅผ ์์ | ์์ ํ๋ฉด์ ์ ํ ํ๋ฉด ๋ณธ๋ฌธ. ์๋จ ์์ ์์ญ์ ํค๋(๋๋ [TopBar](../components/top-bar.md))๊ฐ ๋งก๋๋ค | ์ข์ฐ `Container gutter`: ํญ 600 ๋ฏธ๋ง `compact` 16, ์ด์ `regular` 20([ํ๋ฉด ์ฌ๋ฐฑ](../tokens/layout.md)). Native ์์๋ `contentContainerStyle` `paddingVertical: spacing.lg` 20. ์ํธ ์ inset์ ์ ํ์ด ๋ค์ ๋ํ์ง ์๋๋ค |
|
|
58
58
|
| ์์ ํ๋ฉด | `Stack gap="xl"` | ๋ณธ๋ฌธ ํ๋ฆ ์ | ์์ ์ฌ์ด `spacing.xl` 24 |
|
|
59
59
|
| ์ํธ ํ๋ฉด | `Sheet placement="bottom" size="auto"`(๊ธฐ๋ณธ๊ฐ) | ํ๋ฉด ์๋์์ ์ฌ๋ผ์ด, ๋ด์ฉ ๋์ด | radius `xl` 24, ์ต๋ ๋์ด 90%. ์ข์ฐ `spacing.lg` 20ยท์์๋ `spacing.sm` 12(๋ ํ๋ซํผ, `sheetRecipe.content`), Web ์ต๋ ํญ 640 |
|
|
60
|
-
| ์ํธ ๋จธ๋ฆฌ | Sheet `title
|
|
60
|
+
| ์ํธ ๋จธ๋ฆฌ | Sheet ์์ก์ด, `title`์ ๋ณด์ด์ง ์๋ ์ ๊ทผ์ฑ ์ด๋ฆ | ์ํธ ๋งจ ์ ๊ณ ์ | ๋ณด์ด๋ ์ ๋ชฉ ์ค ์์(2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ : ์ํธ๋ ๋ณด์ด๋ ์ ๋ชฉ ์์ด `title`์ ์ ๊ทผ์ฑ ์ด๋ฆ์ผ๋ก๋ง ์ด๋ค) |
|
|
61
61
|
| ๋จ๊ณ ํ์ | `Steps` | ๋ณธ๋ฌธ ๋งจ ์ | ํญ์ ๊ฐ๋ก ํ ์ค, ์๋ `spacing.xl` 24 |
|
|
62
62
|
| ๋จ๊ณ ๋ณธ๋ฌธ | `ContentTransition` > `Stack gap="md"` | Steps ์๋, ๋ณธ๋ฌธ ์คํฌ๋กค | ์ ๋ชฉยท์ค๋ช
์ฌ์ด `spacing.md` 16, `slide` ๊ฐ๋ก 16 ์ด๋ |
|
|
63
63
|
| ํ๋ | Sheet `footer` + Button ร2 | ์ํธ ์๋ ๊ณ ์ (์คํฌ๋กค ๋ฐ) | Web ์ค๋ฅธ์ชฝ ์ ๋ ฌ ๊ฐ๋ก [์ด์ ghost][๊ณ์ primary], ์ฌ์ด `spacing.sm` 12. Native ์ธ๋ก ์ด ๊ฝ ์ฐฌ ํญ [๊ณ์]โ[์ด์ ], ์ฌ์ด `spacing.sm` 12, ์ `spacing.sm` 12. ๋์ด 44 |
|
|
@@ -209,4 +209,6 @@ import { Steps } from "@hjmds/react-native/steps";
|
|
|
209
209
|
|
|
210
210
|
## ๊ทผ๊ฑฐ
|
|
211
211
|
|
|
212
|
+
2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ ("๊ตต๊ธฐ ์ข๋ ์ค์ฌ"): ๋ชจ๋ ๊ธ์ ๊ตต๊ธฐ๋ฅผ ํ ๋จ๊ณ ๋ฎ์ท๋ค. ํฐ ์ซ์ยท์ ํ ์ํ 600(ํฐ ์ ๋ชฉ ๋จ๊ณ๋ ๊ฐ์ ๋ ํ์ง), ์ ๋ชฉยท๊ฐ์กฐ 500, label 500, ๋ณธ๋ฌธ 400์ด๋ฉฐ ์ ๋ณธ์ [ํ์ดํฌ๊ทธ๋ํผ](../tokens/typography.md)๋ค.
|
|
213
|
+
|
|
212
214
|
- 2026-10-17 ๊ตฌ์ฑ ๋ฆฌ๋ทฐ: ์์ ํ๋ฉด ์ ๋ชฉ์ด heavy 800 `level2`๋ก ํ๋ฉด ์ ๋ชฉ ๊ท์น(semibold)๋ณด๋ค ๋ฌด๊ฑฐ์ ๊ณ , ๋ฐ์คํฌํฑ์์ ๋ฒํผ๊ณผ ๋ฌธ๊ตฌ๊ฐ 1280 ํญ ์ ์ฒด๋ก ๋์ด๋ฌ๋ค. ๊ทธ๋์ ์ ๋ชฉ์ `level3`์ผ๋ก ๋ฎ์ถ๊ณ ์คํ ๋ฆฌ์ ์ฝ๊ธฐ ํญ Container๋ฅผ ์ ์ฉํ๋ค.
|
|
@@ -51,7 +51,7 @@ Native(ํ๋จ ์ํธ, ํค๋ณด๋ ์ฌ๋ผ์ด) Web(ํ๋จ ์ํธ)
|
|
|
51
51
|
| --- | --- | --- | --- |
|
|
52
52
|
| ๋ฐ๊นฅ ํ | ์ํธ ์: `Sheet`(Modal)๊ฐ backdropยท๋ณธ๋ฌธ ์คํฌ๋กค(Native `scrollable`)ยทํค๋ณด๋(Native `keyboardAvoidance`)ยท์์ ์์ญ์ ์์ . ํธ๋ฆฌ๊ฑฐ: ์ ํ ํ๋ฉด์ ๋ฐ๊นฅ ํ(Web ๋ฌธ์ ์คํฌ๋กค > `Container`, Native `ScrollView` > `Container`) | ์ํธ๋ ํ๋ฉด ์ ์ค๋ฒ๋ ์ด, ํธ๋ฆฌ๊ฑฐ๋ ํ๋ฉด ๋ณธ๋ฌธ | ์ํธ ์ ์ฌ๋ฐฑ์ ์๋ ํ๋ค(Sheet ์์ , ์ ํ์ด insetยทํค๋ณด๋ ์ฌ๋ฐฑ์ ๋ค์ ๋ํ์ง ์๋๋ค). ํธ๋ฆฌ๊ฑฐ ํ๋ฉด ์ข์ฐ๋ `Container gutter` ํญ 600 ๋ฏธ๋ง `compact` 16 ยท ์ด์ `regular` 20([ํ๋ฉด ์ฌ๋ฐฑ](../tokens/layout.md)) |
|
|
53
53
|
| ์ํธ ํ | `Sheet` placement `bottom` | ํ๋ฉด ํ๋จ์ ๋ถ๊ณ ์ ๋ชจ์๋ฆฌ๋ง ๋ฅ๊ธ๋ค | radius `xl` 24, ์ต๋ ๋์ด `maxHeightRatio` 0.9(๋ทฐํฌํธ์ 90%), Web ์ต๋ ํญ 640 |
|
|
54
|
-
| ๋จธ๋ฆฌ |
|
|
54
|
+
| ๋จธ๋ฆฌ | ์์ก์ด(+ `showClose`์ผ ๋ ๋ ร IconButton). ๋ณด์ด๋ ์ ๋ชฉ ์์, `title`์ ์ ๊ทผ์ฑ ์ด๋ฆ(2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ : ์ํธ๋ ๋ณด์ด๋ ์ ๋ชฉ ์์ด `title`์ ์ ๊ทผ์ฑ ์ด๋ฆ์ผ๋ก๋ง ์ด๋ค) | ์ํธ ๋งจ ์, ๊ณ ์ | ร ๋จธ๋ฆฌ ์ต์ ๋์ด `control.minTouchTarget` 44ยท์ข์ฐ `spacing.lg` 20(+์ข์ฐ inset)ยท์ `spacing.sm` 12(๋ ํ๋ซํผ ๊ฐ์) |
|
|
55
55
|
| ์คํจ ์๋ฆผ | `Notice tone="danger"` | ๋ณธ๋ฌธ ๋งจ ์(์
๋ ฅ ์), ์คํจํ์ ๋๋ง, ์คํฌ๋กค | ๋ณธ๋ฌธ ํญ๋ชฉ ์ฌ์ด `spacing.md` 16 |
|
|
56
56
|
| ๋ณธ๋ฌธ | `TextField` + ์ค๋ช
| ๋จธ๋ฆฌ ์๋, **์คํฌ๋กค** | ํญ๋ชฉ ์ฌ์ด `sheetRecipe.body.gap` `spacing.md` 16. Web body padding `spacing.lg` 20 |
|
|
57
57
|
| ์๋ฃ | footer `Button`(primary) | ๋ณธ๋ฌธ ์๋, **๊ณ ์ **(์คํฌ๋กค ๋ฐ) | ๋์ด `medium` 44. Native ์ `spacing.sm` 12, footer ์ธ๋ก ์ด์ด๋ผ ๊ฝ ์ฐฌ ํญ(`fullWidth` ๋ถํ์). Web ์ค๋ฅธ์ชฝ ์ ๋ ฌ, ๋ฒํผ ์ฌ์ด `spacing.sm` 12, padding 0 `spacing.lg` 20 `spacing.lg` 20 |
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
| ์ ๋ชฉ | `Heading level="level3"` | ๋ฌถ์ ๋งจ ์ | 24/32(`heading.level3`), ๋ฌถ์ ์ ๊ฐ๊ฒฉ `layout.contentGap` 16(`Stack gap="md"`) |
|
|
65
65
|
| ํ์ฌ ๊ฐ | `Text` | ์ ๋ชฉ ์๋, ํธ๋ฆฌ๊ฑฐ ์ | `spacing.md` 16 |
|
|
66
66
|
| ํธ๋ฆฌ๊ฑฐ | `Button`(primary) | ํ์ฌ ๊ฐ ์๋ | `medium` 44(`control.buttonHeight`) |
|
|
67
|
-
| ์ํธ ๋จธ๋ฆฌ | `Sheet`
|
|
68
|
-
| ์ ํ์ง | `RadioGroup`(`presentation="card"`, `accessibilityLabel` = ์ํธ
|
|
67
|
+
| ์ํธ ๋จธ๋ฆฌ | `Sheet` ์์ก์ด(+ `showClose`์ผ ๋ ๋ ร) | ์ํธ ์ ๊ณ ์ | ๋ณด์ด๋ ์ ๋ชฉ ์์, `title`์ ์ ๊ทผ์ฑ ์ด๋ฆ(2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ : ์ํธ๋ ๋ณด์ด๋ ์ ๋ชฉ ์์ด `title`์ ์ ๊ทผ์ฑ ์ด๋ฆ์ผ๋ก๋ง ์ด๋ค). ร ๋จธ๋ฆฌ ์ต์ ๋์ด `control.minTouchTarget` 44 |
|
|
68
|
+
| ์ ํ์ง | `RadioGroup`(`presentation="card"`, `accessibilityLabel` = ์ํธ `title`) | ์ํธ body, ์คํฌ๋กค | ํ ์ต์ ๋์ด 56(`layout.rowHeight.singleLine`), ํญ๋ชฉ ์ฌ์ด `spacing.xs` 8(`selectionGroupRecipe`). ์๋ด ๋ฌธ๊ตฌ์๋ `Stack gap="md"` 16. ์ค์นํ ๋ฒ์ ์ Sheet body gap๊ณผ ์ค์ฒฉ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฉฐ checkout ์ํ๋ฅผ npm ๊ฒ์ ์ฆ๊ฑฐ๋ก ์ผ์ง ์๋๋ค |
|
|
69
69
|
| ํ๋ | `Button` ์ ์ฉยท์ทจ์ | ์ํธ footer, ์คํฌ๋กค ๋ฐ ๊ณ ์ | ๊ฐ๊ฒฉ `spacing.sm` 12(`sheetRecipe.footer.gap`), Native ์ ์ฌ๋ฐฑ `spacing.sm` 12 |
|
|
70
70
|
| ์ํธ ํ | `Sheet` | ํ๋จ, ๋ชจ๋ฌ | Web ์ต๋ ํญ 640(`sheetRecipe.web.maxWidth`)ยท์ต๋ ๋์ด 90%, Native ๊ฐ๋ก ์ฌ๋ฐฑ `spacing.lg` 20ยท์ต๋ ๋์ด 90%(`maxHeightRatio` 0.9), ํ๋จ ์์ ์์ญ ์ถ๊ฐ |
|
|
71
71
|
|
|
@@ -199,7 +199,7 @@ Web `gutter`๋ [ํ๋ฉด ์ฌ๋ฐฑ๊ณผ ๋๋น](../tokens/layout.md)์ฒ๋ผ ํญ ๊ตฌ๊ฐ
|
|
|
199
199
|
| ํญ๋ชฉ | Web | Native |
|
|
200
200
|
| --- | --- | --- |
|
|
201
201
|
| ํธ๋ฆฌ๊ฑฐ ref | `Button ref` | `View ref collapsable={false}`๋ก ๊ฐ์ |
|
|
202
|
-
| ์ํธ ๋จธ๋ฆฌ |
|
|
202
|
+
| ์ํธ ๋จธ๋ฆฌ | ๋ณด์ด๋ ์ ๋ชฉ ์์(์๊ฐ ์จ๊น `h2`) | ๋ณด์ด๋ ์ ๋ชฉ ์์(์ ๊ทผ์ฑ ๋จธ๋ฆฌ๊ธ) |
|
|
203
203
|
| footer | ๊ฐ๋ก flex(wrap, ๋ ์ ๋ ฌ), [์ทจ์][์ ์ฉ] | ์ธ๋ก View, ์ ์ฌ๋ฐฑ `spacing.sm` 12, [์ ์ฉ] ์ [์ทจ์] ์๋ |
|
|
204
204
|
| ์ด์ | focus trap + `returnFocusRef` | `returnFocusRef` |
|
|
205
205
|
| ์ํ ์๋ฆผ | `role="status"` | live region(Android) + iOS ์๋ฆผ ํธ์ถ |
|
|
@@ -25,13 +25,13 @@
|
|
|
25
25
|
|
|
26
26
|
```text
|
|
27
27
|
๋ถ๋ชจ ํ๋ฉด์ ๊ณต๊ฐ ์ฌ๋กฏ
|
|
28
|
-
โโ
|
|
28
|
+
โโ ์์ก์ด โ ์จ๋ฒ โ ์ดฌ์ (์ ๋ชฉ์ ์ ๊ทผ์ฑ ์ด๋ฆ๋ง)
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
| ์์ญ | ์ปดํฌ๋ํธ | ์์น | ํฌ๊ธฐยท๊ฐ๊ฒฉ |
|
|
32
32
|
| --- | --- | --- | --- |
|
|
33
33
|
| ๋ฐ๊นฅ ํ | PhotoSourceSheet ๋๋ ํฌํจ Surface | ๋ถ๋ชจ ํ๋ฉด์ ํด๋น ์ฌ๋กฏ | [๋ฐฐ์น](../components/photo-source-sheet.md#๋ฐฐ์น)์ ๋ฐ๋ฅธ๋ค |
|
|
34
|
-
| ๋ด์ฉ | PhotoSourceSheet ๋ด๋ถ ์ฌ๋กฏ |
|
|
34
|
+
| ๋ด์ฉ | PhotoSourceSheet ๋ด๋ถ ์ฌ๋กฏ | ์จ๋ฒ โ ์ดฌ์(๋ณด์ด๋ ์ ๋ชฉ ์์(2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ : ์ํธ๋ ๋ณด์ด๋ ์ ๋ชฉ ์์ด `title`์ ์ ๊ทผ์ฑ ์ด๋ฆ์ผ๋ก๋ง ์ด๋ค)) | spacing ํ ํฐ๊ณผ ํฌํจ ์ปดํฌ๋ํธ recipe |
|
|
35
35
|
| ํ๋ | Button ๋๋ ๊ณต๊ฐ ์ฝ๋ฐฑ | ๋ด์ฉ๊ณผ ๊ฐ๊น์ด ๋ช
์ ์ง์
์ | ์ฃผ ํ๋ ํ๋, ๋ณด์กฐ ํ๋๊ณผ ๊ตฌ๋ถ |
|
|
36
36
|
|
|
37
37
|
## ํ๋ฆ๊ณผ ์ํ
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
| ์ํ | ๋ชจ์ต | ํฌ์ปค์คยท์๋ฆผ |
|
|
44
44
|
| --- | --- | --- |
|
|
45
|
-
| ๊ธฐ๋ณธ |
|
|
45
|
+
| ๊ธฐ๋ณธ | ์จ๋ฒ โ ์ดฌ์(์ํธ ์ด๋ฆ = `labels.title`) | ์ด๋ฆยท์ ํ ์ฌ๋ถ๋ฅผ ๋ณด์กฐ๊ณตํ์ ๋
ธ์ถ |
|
|
46
46
|
| ์งํ ์ค | ํด๋น ์์
pending, ์
๋ ฅยท๊ธฐ์กด ๊ฒฐ๊ณผ ๋ณด์กด | ์ค๋ณต ์์ฒญ ์ฐจ๋จ, ๋ก๋ฉ์ ํฌ์ปค์ค๋ฅผ ์ฎ๊ธฐ์ง ์์ |
|
|
47
47
|
| ์คํจ | ๊ถํ ๊ฑฐ๋ถยท์ทจ์๋ ๊ธฐ์กด ์ ํ ์ ์ง | ์ค๋ฅ ๊ทผ์ฒ ์ฌ์๋, ํ์ํ ๋๋ง ์ค๋ฅ ์ฝ๊ธฐ |
|
|
48
48
|
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
| ์์ญ | ์ปดํฌ๋ํธ | ์์น | ํฌ๊ธฐยท๊ฐ๊ฒฉ |
|
|
34
34
|
| --- | --- | --- | --- |
|
|
35
35
|
| ๋ฐ๊นฅ ํ | Stack. Web์ ์ ํ ํ๋ฉด์ `Container size="reading"` ์ | ํ๋ฉด์ ๋ณธ๋ฌธ ํ๋ฆ | gap lg=20px, ํญ์ Container๋ฅผ ๋ฐ๋ฅธ๋ค(Web ์ต๋ `layout.readingMaxWidth` 720) |
|
|
36
|
-
| ์ ๋ชฉ | `Heading level="level3"` | ์ ํ ์ | `heading` ๊ธ์ ํฌ๊ธฐยท
|
|
36
|
+
| ์ ๋ชฉ | `Heading level="level3"` | ์ ํ ์ | `heading` ๊ธ์ ํฌ๊ธฐยทmedium(500) |
|
|
37
37
|
| ์ ํ | SegmentedControl 2๊ฐ | ์ ๋ชฉ ์๋, ์ฐ๊ฒฐํ ๋ค์ ํํฐํ | ๊ธฐ๋ณธ 44px ํฐ์น ์์ญ, ์ค์ ๊ธ์์ ๋ฐ๋ฅธ ๋์ด |
|
|
38
38
|
| ๊ฒฐ๊ณผยท๋ฉ๋ชจ | Text ยท TextField | ์ ํ ์ปจํธ๋กค ์๋ | ์ ํ ๋ณ๊ฒฝ ์ ํ๋ ์ฌ์์ฑ ์์ |
|
|
39
39
|
| Native ํ๋ฉด host | ScreenLayout ยท KeyboardAvoiding | ๋ณธ๋ฌธ ์คํฌ๋กค๊ณผ ๋ฐ๊นฅ ํค๋ณด๋ ์ฌ๋ฐฑ | flex 1, ๋ ์ฌ๋ฐฑ spacing.md=16 |
|
|
@@ -74,3 +74,7 @@ Web์ `@hjmds/react`์ ํด๋น granular entry, Native๋ `@hjmds/react-native`
|
|
|
74
74
|
| --- | --- | --- |
|
|
75
75
|
| ๋ฐฐ์น/ํ
๋ง | Stack๊ณผ HjmProvider | Stack๊ณผ HjmNativeProvider |
|
|
76
76
|
| ํฐ ๊ธ์ยท์ข์ ํญ | ์ค๋ฐ๊ฟยท๋จ์ผ ๋ด์ฉ | ๊ฐ์ ์์, OS ํ๋ฉด ๊ฒ์ฆ์ ๋ณ๋ |
|
|
77
|
+
|
|
78
|
+
## ๊ทผ๊ฑฐ
|
|
79
|
+
|
|
80
|
+
2026-10-17 ์ฌ์ฉ์ ๊ฒฐ์ ("๊ตต๊ธฐ ์ข๋ ์ค์ฌ"): ๋ชจ๋ ๊ธ์ ๊ตต๊ธฐ๋ฅผ ํ ๋จ๊ณ ๋ฎ์ท๋ค. ํฐ ์ซ์ยท์ ํ ์ํ 600(ํฐ ์ ๋ชฉ ๋จ๊ณ๋ ๊ฐ์ ๋ ํ์ง), ์ ๋ชฉยท๊ฐ์กฐ 500, label 500, ๋ณธ๋ฌธ 400์ด๋ฉฐ ์ ๋ณธ์ [ํ์ดํฌ๊ทธ๋ํผ](../tokens/typography.md)๋ค.
|