@hjmds/design-contracts 0.8.2
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/README.md +208 -0
- package/dist/alert-dialog.d.ts +102 -0
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +136 -0
- package/dist/alert-dialog.js.map +1 -0
- package/dist/base-recipes.d.ts +184 -0
- package/dist/base-recipes.d.ts.map +1 -0
- package/dist/base-recipes.js +129 -0
- package/dist/base-recipes.js.map +1 -0
- package/dist/behaviors.d.ts +1254 -0
- package/dist/behaviors.d.ts.map +1 -0
- package/dist/behaviors.js +972 -0
- package/dist/behaviors.js.map +1 -0
- package/dist/bottom-navigation-defaults.d.ts +13 -0
- package/dist/bottom-navigation-defaults.d.ts.map +1 -0
- package/dist/bottom-navigation-defaults.js +10 -0
- package/dist/bottom-navigation-defaults.js.map +1 -0
- package/dist/bottom-navigation.d.ts +114 -0
- package/dist/bottom-navigation.d.ts.map +1 -0
- package/dist/bottom-navigation.js +223 -0
- package/dist/bottom-navigation.js.map +1 -0
- package/dist/breadcrumb.d.ts +97 -0
- package/dist/breadcrumb.d.ts.map +1 -0
- package/dist/breadcrumb.js +99 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/calendar.d.ts +285 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +297 -0
- package/dist/calendar.js.map +1 -0
- package/dist/card.d.ts +39 -0
- package/dist/card.d.ts.map +1 -0
- package/dist/card.js +50 -0
- package/dist/card.js.map +1 -0
- package/dist/carousel.d.ts +180 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +172 -0
- package/dist/carousel.js.map +1 -0
- package/dist/catalog.d.ts +7158 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +220 -0
- package/dist/catalog.js.map +1 -0
- package/dist/collection.d.ts +123 -0
- package/dist/collection.d.ts.map +1 -0
- package/dist/collection.js +211 -0
- package/dist/collection.js.map +1 -0
- package/dist/color-references.d.ts +46 -0
- package/dist/color-references.d.ts.map +1 -0
- package/dist/color-references.js +39 -0
- package/dist/color-references.js.map +1 -0
- package/dist/colors.d.ts +56 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +90 -0
- package/dist/colors.js.map +1 -0
- package/dist/command-palette.d.ts +240 -0
- package/dist/command-palette.d.ts.map +1 -0
- package/dist/command-palette.js +97 -0
- package/dist/command-palette.js.map +1 -0
- package/dist/component-contracts.d.ts +137 -0
- package/dist/component-contracts.d.ts.map +1 -0
- package/dist/component-contracts.js +53 -0
- package/dist/component-contracts.js.map +1 -0
- package/dist/component-definitions.d.ts +135 -0
- package/dist/component-definitions.d.ts.map +1 -0
- package/dist/component-definitions.js +142 -0
- package/dist/component-definitions.js.map +1 -0
- package/dist/component-recipes.d.ts +3583 -0
- package/dist/component-recipes.d.ts.map +1 -0
- package/dist/component-recipes.js +1503 -0
- package/dist/component-recipes.js.map +1 -0
- package/dist/component-references.d.ts +416 -0
- package/dist/component-references.d.ts.map +1 -0
- package/dist/component-references.js +140 -0
- package/dist/component-references.js.map +1 -0
- package/dist/content-state.d.ts +104 -0
- package/dist/content-state.d.ts.map +1 -0
- package/dist/content-state.js +116 -0
- package/dist/content-state.js.map +1 -0
- package/dist/counter-badge-recipe.d.ts +80 -0
- package/dist/counter-badge-recipe.d.ts.map +1 -0
- package/dist/counter-badge-recipe.js +44 -0
- package/dist/counter-badge-recipe.js.map +1 -0
- package/dist/counter-badge.d.ts +12 -0
- package/dist/counter-badge.d.ts.map +1 -0
- package/dist/counter-badge.js +21 -0
- package/dist/counter-badge.js.map +1 -0
- package/dist/data-table.d.ts +203 -0
- package/dist/data-table.d.ts.map +1 -0
- package/dist/data-table.js +182 -0
- package/dist/data-table.js.map +1 -0
- package/dist/date-picker.d.ts +268 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +168 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/description-list.d.ts +68 -0
- package/dist/description-list.d.ts.map +1 -0
- package/dist/description-list.js +85 -0
- package/dist/description-list.js.map +1 -0
- package/dist/design-system-provider.d.ts +80 -0
- package/dist/design-system-provider.d.ts.map +1 -0
- package/dist/design-system-provider.js +147 -0
- package/dist/design-system-provider.js.map +1 -0
- package/dist/evidence.d.ts +49 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +133 -0
- package/dist/evidence.js.map +1 -0
- package/dist/file-picker.d.ts +183 -0
- package/dist/file-picker.d.ts.map +1 -0
- package/dist/file-picker.js +224 -0
- package/dist/file-picker.js.map +1 -0
- package/dist/floating-action-button.d.ts +143 -0
- package/dist/floating-action-button.d.ts.map +1 -0
- package/dist/floating-action-button.js +149 -0
- package/dist/floating-action-button.js.map +1 -0
- package/dist/form.d.ts +143 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +206 -0
- package/dist/form.js.map +1 -0
- package/dist/foundations.d.ts +300 -0
- package/dist/foundations.d.ts.map +1 -0
- package/dist/foundations.js +238 -0
- package/dist/foundations.js.map +1 -0
- package/dist/grid.d.ts +75 -0
- package/dist/grid.d.ts.map +1 -0
- package/dist/grid.js +133 -0
- package/dist/grid.js.map +1 -0
- package/dist/icon-button-recipe.d.ts +99 -0
- package/dist/icon-button-recipe.d.ts.map +1 -0
- package/dist/icon-button-recipe.js +53 -0
- package/dist/icon-button-recipe.js.map +1 -0
- package/dist/icon.d.ts +41 -0
- package/dist/icon.d.ts.map +1 -0
- package/dist/icon.js +147 -0
- package/dist/icon.js.map +1 -0
- package/dist/image.d.ts +82 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +100 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +118 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +118 -0
- package/dist/layout.js.map +1 -0
- package/dist/link.d.ts +57 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +142 -0
- package/dist/link.js.map +1 -0
- package/dist/load-more.d.ts +64 -0
- package/dist/load-more.d.ts.map +1 -0
- package/dist/load-more.js +124 -0
- package/dist/load-more.js.map +1 -0
- package/dist/mentions.d.ts +67 -0
- package/dist/mentions.d.ts.map +1 -0
- package/dist/mentions.js +107 -0
- package/dist/mentions.js.map +1 -0
- package/dist/number-field.d.ts +208 -0
- package/dist/number-field.d.ts.map +1 -0
- package/dist/number-field.js +247 -0
- package/dist/number-field.js.map +1 -0
- package/dist/otp-field.d.ts +152 -0
- package/dist/otp-field.d.ts.map +1 -0
- package/dist/otp-field.js +117 -0
- package/dist/otp-field.js.map +1 -0
- package/dist/pagination.d.ts +181 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +226 -0
- package/dist/pagination.js.map +1 -0
- package/dist/password-field.d.ts +187 -0
- package/dist/password-field.d.ts.map +1 -0
- package/dist/password-field.js +120 -0
- package/dist/password-field.js.map +1 -0
- package/dist/popover.d.ts +152 -0
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +137 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress-recipe.d.ts +43 -0
- package/dist/progress-recipe.d.ts.map +1 -0
- package/dist/progress-recipe.js +16 -0
- package/dist/progress-recipe.js.map +1 -0
- package/dist/recipes.d.ts +31 -0
- package/dist/recipes.d.ts.map +1 -0
- package/dist/recipes.js +46 -0
- package/dist/recipes.js.map +1 -0
- package/dist/responsive.d.ts +27 -0
- package/dist/responsive.d.ts.map +1 -0
- package/dist/responsive.js +66 -0
- package/dist/responsive.js.map +1 -0
- package/dist/result.d.ts +111 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +97 -0
- package/dist/result.js.map +1 -0
- package/dist/selection-helpers.d.ts +16 -0
- package/dist/selection-helpers.d.ts.map +1 -0
- package/dist/selection-helpers.js +52 -0
- package/dist/selection-helpers.js.map +1 -0
- package/dist/semantic-colors.d.ts +275 -0
- package/dist/semantic-colors.d.ts.map +1 -0
- package/dist/semantic-colors.js +84 -0
- package/dist/semantic-colors.js.map +1 -0
- package/dist/sheet.d.ts +51 -0
- package/dist/sheet.d.ts.map +1 -0
- package/dist/sheet.js +69 -0
- package/dist/sheet.js.map +1 -0
- package/dist/showcase.d.ts +153 -0
- package/dist/showcase.d.ts.map +1 -0
- package/dist/showcase.js +210 -0
- package/dist/showcase.js.map +1 -0
- package/dist/side-panel.d.ts +199 -0
- package/dist/side-panel.d.ts.map +1 -0
- package/dist/side-panel.js +111 -0
- package/dist/side-panel.js.map +1 -0
- package/dist/slider.d.ts +138 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +150 -0
- package/dist/slider.js.map +1 -0
- package/dist/splitter.d.ts +113 -0
- package/dist/splitter.d.ts.map +1 -0
- package/dist/splitter.js +99 -0
- package/dist/splitter.js.map +1 -0
- package/dist/statistic.d.ts +41 -0
- package/dist/statistic.d.ts.map +1 -0
- package/dist/statistic.js +76 -0
- package/dist/statistic.js.map +1 -0
- package/dist/steps.d.ts +196 -0
- package/dist/steps.d.ts.map +1 -0
- package/dist/steps.js +160 -0
- package/dist/steps.js.map +1 -0
- package/dist/tag.d.ts +128 -0
- package/dist/tag.d.ts.map +1 -0
- package/dist/tag.js +93 -0
- package/dist/tag.js.map +1 -0
- package/dist/timeline.d.ts +147 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +127 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toast.d.ts +164 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +529 -0
- package/dist/toast.js.map +1 -0
- package/dist/tokens.d.ts +9 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +9 -0
- package/dist/tokens.js.map +1 -0
- package/dist/tooltip.d.ts +44 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +88 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tour.d.ts +218 -0
- package/dist/tour.d.ts.map +1 -0
- package/dist/tour.js +211 -0
- package/dist/tour.js.map +1 -0
- package/dist/transfer-list.d.ts +207 -0
- package/dist/transfer-list.d.ts.map +1 -0
- package/dist/transfer-list.js +193 -0
- package/dist/transfer-list.js.map +1 -0
- package/dist/tree-select.d.ts +78 -0
- package/dist/tree-select.d.ts.map +1 -0
- package/dist/tree-select.js +132 -0
- package/dist/tree-select.js.map +1 -0
- package/dist/tree.d.ts +206 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +223 -0
- package/dist/tree.js.map +1 -0
- package/dist/upload-item.d.ts +173 -0
- package/dist/upload-item.d.ts.map +1 -0
- package/dist/upload-item.js +156 -0
- package/dist/upload-item.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/docs/affix.md +63 -0
- package/docs/anchor.md +59 -0
- package/docs/ant-design-coverage.md +119 -0
- package/docs/app-provider.md +50 -0
- package/docs/app-rn-adoption.md +227 -0
- package/docs/architecture.md +320 -0
- package/docs/authoring-brief.md +87 -0
- package/docs/border-beam.md +66 -0
- package/docs/bottom-navigation.md +127 -0
- package/docs/breadcrumb.md +82 -0
- package/docs/calendar.md +154 -0
- package/docs/carousel.md +130 -0
- package/docs/cascader.md +93 -0
- package/docs/catalog-decision-status.md +306 -0
- package/docs/color-picker.md +72 -0
- package/docs/command-palette.md +116 -0
- package/docs/confirm-popover.md +93 -0
- package/docs/consistency-audit.md +383 -0
- package/docs/consumer-release-gate.md +90 -0
- package/docs/content-state.md +156 -0
- package/docs/context-panel.md +88 -0
- package/docs/cross-platform-core-normalization.md +118 -0
- package/docs/data-table.md +79 -0
- package/docs/date-picker.md +84 -0
- package/docs/description-list.md +75 -0
- package/docs/design-system-provider.md +139 -0
- package/docs/dropdown.md +78 -0
- package/docs/expansion-roadmap.md +285 -0
- package/docs/file-picker.md +59 -0
- package/docs/floating-action-button.md +111 -0
- package/docs/form.md +134 -0
- package/docs/generated/component-maturity.md +103 -0
- package/docs/generated/renderer-evidence.json +5597 -0
- package/docs/generated/renderer-evidence.md +132 -0
- package/docs/generated/showcase-manifest.json +3732 -0
- package/docs/icon.md +22 -0
- package/docs/identity.md +121 -0
- package/docs/image.md +84 -0
- package/docs/implementation-0.5.md +85 -0
- package/docs/layout-primitives.md +107 -0
- package/docs/layout.md +83 -0
- package/docs/library-reference-decisions.md +123 -0
- package/docs/link.md +67 -0
- package/docs/load-more.md +31 -0
- package/docs/mentions.md +82 -0
- package/docs/migration-0.2.md +108 -0
- package/docs/migration-0.3.md +72 -0
- package/docs/migration-0.5.md +82 -0
- package/docs/migration-0.6.md +197 -0
- package/docs/notification.md +54 -0
- package/docs/number-field.md +82 -0
- package/docs/otp-field.md +103 -0
- package/docs/pagination.md +139 -0
- package/docs/password-field.md +98 -0
- package/docs/popover.md +124 -0
- package/docs/promotion-candidates.md +169 -0
- package/docs/qr-code.md +69 -0
- package/docs/rating.md +58 -0
- package/docs/responsive-grid.md +90 -0
- package/docs/result.md +96 -0
- package/docs/showcase.md +97 -0
- package/docs/side-panel.md +71 -0
- package/docs/slider.md +79 -0
- package/docs/splitter.md +55 -0
- package/docs/statistic.md +16 -0
- package/docs/steps.md +115 -0
- package/docs/tag.md +57 -0
- package/docs/time-picker.md +88 -0
- package/docs/timeline.md +146 -0
- package/docs/toast.md +127 -0
- package/docs/tooltip.md +58 -0
- package/docs/tour.md +136 -0
- package/docs/transfer-list.md +94 -0
- package/docs/tree-select.md +101 -0
- package/docs/tree.md +123 -0
- package/docs/upload-item.md +68 -0
- package/docs/utility.md +53 -0
- package/docs/virtual-list.md +70 -0
- package/docs/watermark.md +58 -0
- package/package.json +402 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# FloatingActionButton contract
|
|
2
|
+
|
|
3
|
+
## ๋ฌธ์
|
|
4
|
+
|
|
5
|
+
๋ชฉ๋กยทํผ๋์ฒ๋ผ ์คํฌ๋กค๋๋ ์ฝํ
์ธ ์์, ํ๋ฉด ์ ์ฒด ํญ์ ์ฐ์ง ์์ผ๋ฉด์๋ ํญ์ ์๋ฟ๋
|
|
6
|
+
์๋ฆฌ์ ๋ ์๋ ๋จ์ผ ์์ฑ ํ๋(์ ๊ธฐ๋ก ์ถ๊ฐ, ์ ๊ธ ์์ฑ)์ด ํ์ํ๋ค. antd
|
|
7
|
+
`FloatButton`์ด ์ด ๋ฌธ์ ๋ฅผ ์ปค๋ฒํ๋ค.
|
|
8
|
+
|
|
9
|
+
## BottomCTA์ ๊ฒน์น์ง ์๋๋ค (ํ์ )
|
|
10
|
+
|
|
11
|
+
์ด ์์คํ
์๋ ์ด๋ฏธ ํ๋ฉด ํ๋จ์ ๊ณ ์ ๋ ์ฃผ์ ํ๋(`bottomCtaRecipe`)์ด ์๋ค. ๋์
|
|
12
|
+
์ฐจ์ด๋ ์ด๋ฆ์ด ์๋๋ผ **์ฝํ
์ธ ์์ ๊ด๊ณ**๋ค.
|
|
13
|
+
|
|
14
|
+
| | BottomCTA | FloatingActionButton |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| ํญ | ํ๋ฉด ์ ์ฒด(`bottomCtaRecipe`์ `paddingHorizontal: layout.pagePadding.regular`) | ์ฝํ
์ธ ํญ๊ณผ ๋ฌด๊ดํ ๊ณ ์ ํฌ๊ธฐ ์/์์ฝ |
|
|
17
|
+
| ์๋ฏธ | ๊ทธ ํ๋ฉด์ **๊ฒฐ๋ก ** โ ์ด ํ๋ฆ์ ์ด ํ๋์ผ๋ก ๋๋๋ค | ์์ง ๋ธ๋ผ์ฐ์ง ์ค์ธ ์ฝํ
์ธ **์์ ๋ฌ** ์์ฑ ํ๋ โ ํ๋ฉด์ ๊ฒฐ๋ก ์ด ์๋๋ค |
|
|
18
|
+
| ์ฝํ
์ธ ์์ ๊ด๊ณ | ์ฝํ
์ธ ์๋ ๊ณ ์ ๋ ๋ณ๋ ํ(`bottomCtaRecipe.slots`์ `root/description/secondaryAction/primaryAction`) | ์ฝํ
์ธ **์์ ๊ฒน์ณ** ๋จ๊ณ , ์ฝํ
์ธ ๋ง์ง๋ง ํญ๋ชฉ์ ๊ฐ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค(์๋ ์ฐธ๊ณ ) |
|
|
19
|
+
| ์คํฌ๋กค ๋ฐ์ | ์์ โ ์์น ๊ณ ์ , ํฌ๊ธฐ ๋ถ๋ณ | ์คํฌ๋กค ๋ฐฉํฅ์ ๋ฐ๋ผ ํ์ฅ/์ถ์(์๋ ์ฐธ๊ณ ) |
|
|
20
|
+
|
|
21
|
+
์ฆ ํ ํ๋ฉด์ ์ด๋ ํ๋๋ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด์ง๋ง, ์๋ฆฌ์ ๊ณต์กด๋ ๊ฐ๋ฅํ๋ค(์:
|
|
22
|
+
๋ชฉ๋ก ํ๋ฉด์ "ํํฐ ์ ์ฉ" ๊ฐ์ BottomCTA ๊ฒฐ๋ก ํ๋๊ณผ ๋ณ๊ฐ๋ก "์ ํญ๋ชฉ ์ถ๊ฐ" FAB๊ฐ
|
|
23
|
+
๋จ๋ ๊ฒฝ์ฐ). ๋ ๊ณ์ฝ์ ํ๋๋ก ํฉ์น๋ฉด "ํ๋ฉด์ ๊ฒฐ๋ก "๊ณผ "์ฝํ
์ธ ์ ์์ฑ ํ๋"์ด๋ผ๋
|
|
24
|
+
์๋ก ๋ค๋ฅธ ๋ ์๋ฏธ๋ฅผ ํ recipe๊ฐ ๋ ์๊ฒ ๋๋ฏ๋ก ๋ถ๋ฆฌ๋ฅผ ์ ์งํ๋ค.
|
|
25
|
+
|
|
26
|
+
## ์ผ๋ฐํํ ๊ณ์ฝ
|
|
27
|
+
|
|
28
|
+
### Button/IconButton recipe๋ฅผ ์ฌ์ฌ์ฉํ๋ค โ ์ recipe๋ฅผ ์ป์ง ๋ชปํ๋ค
|
|
29
|
+
|
|
30
|
+
`floatingActionButtonRecipe`๋ ์ ํคยทํฌ๊ธฐยท๊ทธ๋ฆผ์๋ฅผ ์ ์ธํ์ง ์๋๋ค.
|
|
31
|
+
|
|
32
|
+
- `circle`์ `iconButtonRecipe.sizes.large`(diameter 52) ๊ทธ๋๋ก.
|
|
33
|
+
- `tone`์ `iconButtonRecipe.tones.primary` ๊ทธ๋๋ก.
|
|
34
|
+
- `shape`๋ `iconButtonRecipe.shapes.circle`(`radius.full`) ๊ทธ๋๋ก.
|
|
35
|
+
- `expandedLabel`์ `buttonRecipe.sizes.large`์ `textVariant`/`paddingHorizontal` ๊ทธ๋๋ก.
|
|
36
|
+
|
|
37
|
+
๋ ๋ชจ๋(collapsed/expanded) ๋ชจ๋ `large` ํฐ์ด๋ฅผ ๊ณต์ ํ๋ฏ๋ก ๋ชจ์์ด ์ โ ์์ฝ์ผ๋ก
|
|
38
|
+
๋ฐ๋๋ ๋์ ๋์ด(ํฐ์น ํ๊น)๋ 52๋ก ๊ณ ์ ๋๋ค โ ๋ผ๋ฒจ์ด ๋ํ๋๊ฑฐ๋ ์ฌ๋ผ์ง ๋ ๋ฒํผ
|
|
39
|
+
์ ์ฒด๊ฐ ์ธ๋ก๋ก ๋ค์ฉ์ด์ง ์๋๋ค. `docs/dropdown.md`๊ฐ "Menu์ ๊ฑฐ์ ๊ฐ์ anatomy๋ฅผ
|
|
40
|
+
๋ค์ ์ ์ธํ์ง ์๋๋ค"๊ณ ํ์ ํ ๊ฒ๊ณผ ๊ฐ์ ์ด์ ๋ก, ์ด ๋ชจ๋๋ `Button`์ recipe๋ฅผ
|
|
41
|
+
ํฌํฌํ์ง ์๋๋ค.
|
|
42
|
+
|
|
43
|
+
### ์คํฌ๋กค์ ๋ฐ๋ฅธ ํ์ฅ/์ถ์
|
|
44
|
+
|
|
45
|
+
`FloatingActionButtonScrollSignal`(`away-from-start`/`toward-start`/`idle`)์
|
|
46
|
+
LoadMore์ `viewport` ์ ํธ, Popover์ `AnchoredOverlay`์ ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๋ฐ๋ฅธ๋ค โ
|
|
47
|
+
**์คํฌ๋กค ๋ฆฌ์ค๋์ ์๊ณ๊ฐ ํ๋จ์ ๋ ๋๋ฌ ์์ **์ด๊ณ , ์ด ๋ชจ๋์ ์ด์ฐ์ ์ธ ์ ํธ ํ๋๋ง
|
|
48
|
+
๋ฐ์ ๋ค์ ๋ชจ๋๋ฅผ ๋๋ ค์ค๋ค(`resolveFloatingActionButtonLayoutMode`). `idle`์
|
|
49
|
+
"ํ๋จํ ๊ทผ๊ฑฐ๊ฐ ์๋ค"๋ ๋ป์ด๋ฏ๋ก ํ์ฌ ๋ชจ๋๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ค โ ๋ธํ๊ฐ 0์ธ ํ๋ ์๋ง๋ค
|
|
50
|
+
๋งค๋ฒ ์ถ์ธกํด์ ๋ฒํผ์ด ๊น๋นก์ด๋ ์ฌ๊ณ ๋ฅผ ๋ง๋๋ค.
|
|
51
|
+
|
|
52
|
+
๋ผ๋ฒจ์ด ์จ์ด๋(`collapsed`) ์ ๊ทผ์ฑ ์ด๋ฆ์ ์ค์ด๋ค์ง ์๋๋ค.
|
|
53
|
+
`resolveFloatingActionButtonDescriptor`๋ ๋ ๋ชจ๋ ๋ชจ๋์์
|
|
54
|
+
`resolvedAccessibilityLabel`์ ํญ์ ์ ์ฒด `label`๋ก ๊ณ ์ ํ๋ค โ ์์ด์ฝ๋ง ๋ณด์ด๋
|
|
55
|
+
์ํ๊ฐ "์ด๋ฆ ์๋ ๋ฒํผ"์ด ๋๋ ์ฌ๊ณ ๋ฅผ ํ์
์ฐจ์์์ ๋ง๋๋ค.
|
|
56
|
+
|
|
57
|
+
### ์ฝํ
์ธ ๋ง์ง๋ง ํญ๋ชฉ์ ๊ฐ๋ฆฌ๋ ๋ฌธ์ โ ์ฌ๋ฐฑ์ ๊ณ์ฝ์ด ์ฑ
์์ง๋ค
|
|
58
|
+
|
|
59
|
+
FAB๋ ์ฝํ
์ธ ์์ ๊ฒน์ณ ๋จ๋ฏ๋ก, ์คํฌ๋กค ๊ฐ๋ฅํ ์ฝํ
์ธ ๋ ํญ์ FAB์ ๋ฐ์๊ตญ๋งํผ ํ๋จ
|
|
60
|
+
์ฌ๋ฐฑ์ ์์ฝํด์ผ ํ๋ค. ์ด ๊ณ์ฐ์ Web/RN ๋ ๋๋ฌ๊ฐ ๊ฐ์ ๋ค์ ํ๋ฉด ์ด๊ธ๋ ์ ์์ผ๋ฏ๋ก
|
|
61
|
+
`resolveFloatingActionButtonContentClearance(safeAreaBottomInset)`์ด ํ ๊ณณ์์
|
|
62
|
+
`diameter + margin ร 2 + safeAreaBottomInset`์ ๊ณ์ฐํด ๋๋ ค์ค๋ค. safe-area
|
|
63
|
+
inset์ BottomNavigationยทSheetยทToast์ ๊ฐ์ **additive** ๋ชจ๋๋ค(base ์ฌ๋ฐฑ์
|
|
64
|
+
๋ํ์ง, `max()`๋ก ๋์ฒดํ์ง ์๋๋ค).
|
|
65
|
+
|
|
66
|
+
### ๋ญ๋
ยทํญ ์์์์์ ์๋ฆฌ
|
|
67
|
+
|
|
68
|
+
FAB๋ collection ํญ๋ชฉ์ด ์๋๋ค. ์คํฌ๋กค ์ฝํ
์ธ **๋ค**์ ์ค๋ ๊ณ ์ sibling์ผ๋ก
|
|
69
|
+
๋ ๋๋งํ๊ณ , ์ฝํ
์ธ ์์ ๋ฃ์ง ์๋๋ค โ ํญ๋ชฉ์ด ์ถ๊ฐ/์ญ์ ๋์ด๋ FAB์ ๋ญ๋
ยทํญ ์์
|
|
70
|
+
์์น๊ฐ ํ๋ค๋ฆฌ์ง ์๋๋ค. `BottomNavigation`์ด "์์ฑ ํ๋์ destination ๋ชฉ๋ก์
|
|
71
|
+
๋ฃ์ง ์๊ณ ๋ณ๋ Button/IconButton์ผ๋ก ํฉ์ฑํ๋ค"๊ณ ์ด๋ฏธ ์ ํ ๊ฒฝ๊ณ์ ๊ฐ์ ์ด์ ๋ค.
|
|
72
|
+
|
|
73
|
+
## HJM ๊ธฐ๋ณธ๊ฐ
|
|
74
|
+
|
|
75
|
+
- `layoutMode` ๊ธฐ๋ณธ๊ฐ `expanded` โ ์ฒซ ์ง์
์ ๋ผ๋ฒจ์ด ๋ณด์ฌ์ผ ์ฌ์ฉ์๊ฐ ๋ฌด์จ
|
|
76
|
+
ํ๋์ธ์ง ๋จผ์ ์ฝ๋๋ค.
|
|
77
|
+
- ์ ํ์ `motionPreset.micro`(120ms, Reduce Motion์์ ์ฆ์ ์ ํ)๋ฅผ ์ด๋ค.
|
|
78
|
+
์คํฌ๋กค๋ง๋ค ๋ฐ๋ณต ํธ๋ฆฌ๊ฑฐ๋ ์ ์๋ ์ํ ๋ณํ์ด๋ฏ๋ก, ๋ค๋ฅธ recipe๋ค์ ์ด๊ธฐ/๋ซ๊ธฐ์ฉ
|
|
79
|
+
`enter`/`exit`(200ms๋)๋ณด๋ค hover/press๊ธ์ ๊ฐ์ฅ ๋น ๋ฅธ ํฐ์ด๋ฅผ ๊ณจ๋๋ค โ ๋น ๋ฅธ
|
|
80
|
+
์คํฌ๋กค ๋ค๋ก ์ ํ์ด ๋ฐ๋ ค ์์ด๋ ์ฌ๊ณ ๋ฅผ ๋ง๋๋ค.
|
|
81
|
+
- `shadow.floating`์ ์ฌ์ฌ์ฉํ๋ค โ identity.md์ "floating์ menuยทtoast" ๋ชฉ๋ก์
|
|
82
|
+
์ด๋ฆ์ด ๋ช
์๋ผ ์์ง๋ ์์ง๋ง, ์ฝํ
์ธ ์์ ์ค์ ๋ก ๋ ์๋ ๊ณ์ธต์ด๋ผ๋ ๊ฐ์
|
|
83
|
+
์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ์ผํ ๊ธฐ์กด ํฐ์ด๋ค.
|
|
84
|
+
- ๋ชจ์๋ฆฌ ์ฌ๋ฐฑ์ `spacing.md`(16) โ BottomCTA์ ํ๋ฉด ํญ ์ฌ๋ฐฑ(`layout.pagePadding`)๊ณผ
|
|
85
|
+
๋ค๋ฅธ ์ค์ผ์ผ์ด๋ค. FAB๋ ํ๋ฉด ๊ฐ์ฅ์๋ฆฌ์์ ์์ชฝ์ผ๋ก ๋ค์ด์จ ์์ ์์ด์ง, ํญ ์ ์ฒด
|
|
86
|
+
์ฝํ
์ธ ์ ๋ ฌ์ ๋ฐ๋ฅด๋ ์์๊ฐ ์๋๋ค.
|
|
87
|
+
|
|
88
|
+
## ํ๋ซํผ ๋ฒ์ญ
|
|
89
|
+
|
|
90
|
+
- Web: `position: fixed`(๋๋ ์คํฌ๋กค ์ปจํ
์ด๋ ๊ธฐ์ค `sticky`), `aria-label`์ด
|
|
91
|
+
ํญ์ ์ ์ฒด `label`(๋ชจ๋ ๋ฌด๊ด). ์์ด์ฝ์ decorative(`aria-hidden`).
|
|
92
|
+
- Native: ์ ๋ ์์น + safe-area ํ๋จ inset์ additive๋ก ์ ์ฉ.
|
|
93
|
+
`accessibilityLabel` ์ญ์ ํญ์ ์ ์ฒด `label`.
|
|
94
|
+
- Reduce Motion: ๋ชจ์ tween(์ โ ์์ฝ) ์์ด ์์ด์ฝ/๋ผ๋ฒจ opacity ๊ต์ฐจ๋ก ๋์ฒด.
|
|
95
|
+
|
|
96
|
+
## ๊ณต๊ฐํ ์ถ / ๋ฐฐ์ ํ ์ถ
|
|
97
|
+
|
|
98
|
+
| ์ถ | ์ํ |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| `layoutMode`(expanded/collapsed) | ๊ณต๊ฐ |
|
|
101
|
+
| ์ ๊ทผ์ฑ ์ด๋ฆ(ํญ์ ์ ์ฒด label) | ๊ณต๊ฐ, ๋ชจ๋์ ๋
๋ฆฝ |
|
|
102
|
+
| ์ฝํ
์ธ ํ๋จ ์ฌ๋ฐฑ ๊ณ์ฐ | ๊ณต๊ฐ(`resolveFloatingActionButtonContentClearance`) |
|
|
103
|
+
| `disabled` | **๋ฐฐ์ ** โ ์ธก์ ๋ ์๊ตฌ ์์. ์์ฑ ํ๋์ ๋ณดํต ํญ์ ํ์ฑ ์ํ๋ค. ํ์ํด์ง๋ฉด ๊ทธ๋ ์ฐ๋ค |
|
|
104
|
+
| ๋น๋๊ธฐ/๋ก๋ฉ ์ํ | **๋ฐฐ์ ** โ FAB๋ฅผ ๋๋ฅด๋ฉด ๋ณดํต ์ฆ์ ๋ค์ ํ๋ฉด/์ํธ๊ฐ ์ด๋ฆฐ๋ค. ๊ทธ ๋ชฉ์ ์ง ์์ฒด์ ๋น๋๊ธฐ ์ํ๋ ๊ทธ ๋ชฉ์ ์ง(Dialog/Sheet)์ session์ด ์์ ํ ๋ชซ์ด์ง FAB์ ๋ชซ์ด ์๋๋ค |
|
|
105
|
+
| ์์น(์ฝ๋) ์ปค์คํฐ๋ง์ด์ฆ | **๋ฐฐ์ ** โ ์ธก์ ๋ ์ ํ ์๊ตฌ๊ฐ ์๋ค. ๊ธฐ๋ณธ๊ฐ(ํ๋ฉด ๋
ผ๋ฆฌ์ ๋ ์ชฝ ํ๋จ)๋ง ๊ณต๊ฐํ๊ณ , ๋ค๋ฅธ ์ฝ๋๊ฐ ํ์ํด์ง๋ฉด ๊ทธ๋ ์ฐ๋ค |
|
|
106
|
+
| BottomNavigation์ `center-gap` sibling action๊ณผ์ ํตํฉ | **๋ฐฐ์ ** โ ๊ทธ์ชฝ์ ์ด๋ฏธ ๋ณ๋ Button/IconButton ํฉ์ฑ์ผ๋ก ํด๊ฒฐ๋ ๋ฌธ์ (`docs/architecture.md`)์ด๊ณ , ์ด ๊ณ์ฝ์ด ๊ทธ ์๋ฆฌ๋ฅผ ๋์ ํก์ํ์ง ์๋๋ค |
|
|
107
|
+
|
|
108
|
+
## ๊ฒ์ฆ ํ๋ฉด
|
|
109
|
+
|
|
110
|
+
์์ง ์์. `planned โ beta` ์น๊ฒฉ์ ์ค์ ์ ํ vertical slice ์ดํ ๋ฆฌ๋๊ฐ
|
|
111
|
+
์งํํ๋ค. ์ ๋ ฅ ํ๋ณด: Yajalal ๋ง์ด ํ๋ ์ด์ด ๋ชฉ๋ก์ "์ ์ ์ถ๊ฐ".
|
package/docs/form.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Form contract
|
|
2
|
+
|
|
3
|
+
## ๋ฌธ์
|
|
4
|
+
|
|
5
|
+
antd `Form`์ ๋ ์ด์์๊ณผ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒธํฉ๋๋ค(`useForm`, `dependencies`,
|
|
6
|
+
`validateTrigger`, `Form.List`...). HJM์๋ ๋ฐํ์์ด ์์ผ๋ฏ๋ก ๊ทธ ํ๋ฉด์ ์ฎ๊ธธ ์ ์๊ณ ,
|
|
7
|
+
์ฎ๊ธฐ๋ ค๋ ์๋ ์์ฒด๊ฐ ์๋ชป์
๋๋ค. ์ค์ ๋ก ๋ฐ๋ณต๋๋ ์ฌ์ฉ์ ๋ฌธ์ ๋ ๋ ๊ฐ์ง๋ฟ์
๋๋ค.
|
|
8
|
+
|
|
9
|
+
1. ์ฌ๋ฌ `Field`๋ฅผ ํ ํ๋ฉด์ ์์ ๋ ๋ผ๋ฒจยทํ๋ยท๋์๋งยท์ค๋ฅ ์ฌ์ด์ ๋ฆฌ๋ฌ์ด ํ๋ฉด๋ง๋ค
|
|
10
|
+
์ ๊ฐ๊ฐ์ด ๋๋ค.
|
|
11
|
+
2. ์ ์ถ์ ํญ์ ๊ฐ์ ๋ชจ์์ ์คํจ๋ฅผ ๋ง๋ ๋ค โ ๋ ๋ฒ ๋๋ฌ ๋ ๋ฒ ์ ์ก๋๊ฑฐ๋, ์คํจ ๋ฉ์์ง๊ฐ
|
|
12
|
+
์ด๋ ํ๋ ๊ฒ์ธ์ง ํผ ์ ์ฒด ๊ฒ์ธ์ง ํท๊ฐ๋ฆฌ๊ฑฐ๋, ์คํจ ํ ํฌ์ปค์ค๊ฐ ์๋ฌด ๋ฐ๋ ๊ฐ์ง ์๋๋ค.
|
|
13
|
+
|
|
14
|
+
## ์ผ๋ฐํํ ๊ณ์ฝ
|
|
15
|
+
|
|
16
|
+
Form์ **ํ๋๋ค ์ฌ์ด์ ๋ฆฌ๋ฌ**๊ณผ **์ ์ถ ์ธ์
**๋ง ์์ ํฉ๋๋ค. ๊ทธ ์ธ์๋ ๋ชจ๋ ์ ํ(React
|
|
17
|
+
Hook Form ๋ฑ)์ด ์์ ํฉ๋๋ค.
|
|
18
|
+
|
|
19
|
+
### Field์์ ๊ฒฝ๊ณ
|
|
20
|
+
|
|
21
|
+
`Field`๋ ์ด๋ฏธ ํ ํ๋์ ํ๋ ์(background/border/์ํ๋ณ border, label-to-control
|
|
22
|
+
gap, control-to-support-text gap)์ `fieldRecipe`๋ก ์์ ํฉ๋๋ค. `Form`์ ๊ทธ ํ๋ ์์
|
|
23
|
+
๋ค์ ์ ์ํ์ง ์๊ณ , ํ๋ ์์ด ๋๋ ๋ค **๋ค์ ํ๋๊น์ง์ ์ธ๋ก ๊ฐ๊ฒฉ**๋ง `formRecipe`๋ก
|
|
24
|
+
์ ์ํฉ๋๋ค. ํ ํ๋ ๋ด๋ถ์ ๋ฆฌ๋ฌ์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ๊ทธ๊ฒ์ Field์ ๋ณ๊ฒฝ์ด์ง Form์
|
|
25
|
+
prop์ด ์๋๋๋ค.
|
|
26
|
+
|
|
27
|
+
### ์ ์ถ ์ธ์
|
|
28
|
+
|
|
29
|
+
`AlertDialog`๊ฐ ์ด๋ฏธ `idle โ busy โ error/closing โ closed` ์ธ์
์ ๊ฐ๊ณ ์์ต๋๋ค.
|
|
30
|
+
Form์ ๊ฐ์ ๋ฌธ์ (์ค๋ณต ์คํ ์ฐจ๋จ, ์คํจ ํ ์ฌ์๋, ์ ํํ ํ ๋ฒ์ ์ ์ฐ)๋ฅผ ๊ฐ์ ๋ชจ์์ผ๋ก
|
|
31
|
+
ํ๋, ํ ๊ฐ์ง ์ค์ ์ฐจ์ด๋ฅผ ๋ฐ์ํฉ๋๋ค โ AlertDialog์ side effect๋ ํ ๋ฒ ํ์ธํ๊ณ
|
|
32
|
+
๋ซํ๋ ๊ฒ์ด ๋ชฉ์ ์ด์ง๋ง, Form์ ๋๊ฐ ํ๋ฉด์ ๊ณ์ ๋จ์ ์ฌ๋ฌ ๋ฒ ๋ค์ ์ ์ถ๋ฉ๋๋ค(์์ โ
|
|
33
|
+
์ฌ์๋, ๋๋ ์ค์ ํ๋ฉด์ ๋์ค์ ๋ค์ ์ ์ฅ). ๊ทธ๋์ `succeeded`/`failed`๋
|
|
34
|
+
AlertDialog์ `closed`์ฒ๋ผ ์ข
๊ฒฐ ์ํ๊ฐ ์๋๋ผ **์ฌ๋ ์ํ**์
๋๋ค โ ๋ ๋ค์์ ๋ค์
|
|
35
|
+
`submit()`์ ๋ถ๋ฅผ ์ ์์ต๋๋ค.
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
idle โโsubmitโโโ submitting โโresolveโโโ succeeded โโsubmitโโโ submitting โฆ
|
|
39
|
+
โ โ
|
|
40
|
+
โโโrejectโโโ failed โโโโโโโsubmit(retry)โโโโโโโโ
|
|
41
|
+
submitting ์ค์๋ submit()์ด ์ฆ์ blocked๋ฅผ ๋ฐํํ๊ณ onSubmit์ ๋ค์ ๋ถ๋ฅด์ง ์๋๋ค.
|
|
42
|
+
dispose()๊ฐ submitting ์ค ํธ์ถ๋๋ฉด ๊ทธ attempt๋ interrupted๋ก ํ ๋ฒ๋ง ์ ์ฐ๋๋ค.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- `submit(values)`๋ ๋งค ํธ์ถ๋ง๋ค ์์ ์ ๋ฐํ Promise๋ฅผ **์ ํํ ํ ๋ฒ** ์ ์ฐํฉ๋๋ค.
|
|
46
|
+
๊ฐ์ attempt๊ฐ ์ค์ handler ์ฑ๊ณต/์คํจ๋ก ์ ์ฐ๋๊ฑฐ๋, `dispose()`๋ก `interrupted`๋ก
|
|
47
|
+
์ ์ฐ๋๊ฑฐ๋ โ ๋ ์ค ํ๋๋ง ์ผ์ด๋ฉ๋๋ค.
|
|
48
|
+
- `submitting` ์ค์ ๋ชจ๋ `submit()` ํธ์ถ์ handler๋ฅผ ๋ค์ ๋ถ๋ฅด์ง ์๊ณ
|
|
49
|
+
`{ outcome: "blocked", reason: "already-submitting" }`์ ๋๋ ค์ค๋๋ค.
|
|
50
|
+
- `reset()`์ `succeeded`/`failed`์ฒ๋ผ ์ฌ๋ ์ํ์์๋ง `idle`๋ก ๋๋๋ฆฌ๋ฉฐ,
|
|
51
|
+
`submitting` ์ค์๋ ์๋ฌด๊ฒ๋ ๋ฐ๊พธ์ง ์๊ณ `false`๋ฅผ ๋๋ ค์ค๋๋ค(๊ฒฝํฉ ๋ฐฉ์ง).
|
|
52
|
+
- Form์ ๊ฐ์ ๋ค๊ณ ์์ง ์์ต๋๋ค. `submit(values)`๊ฐ ํธ์ถ๋ ๋๋ง๋ค ๊ทธ ์๊ฐ์ ๊ฐ์
|
|
53
|
+
์ ๋ฌ๋ฐ์ ๋ฟ์ด๋ฉฐ, ์ธ์ ์ ์ถ์ ์์ํด๋ ๋๋์ง(dirty/valid ์ฌ๋ถ)๋ ์ ํ์ด ํ๋จํฉ๋๋ค.
|
|
54
|
+
|
|
55
|
+
### ์ค๋ฅ ์์ ๊ถ
|
|
56
|
+
|
|
57
|
+
- **ํ๋ ์ค๋ฅ**๋ ๊ฐ Field์ `validation`(`valid`/`invalid`) ์ถ์ด ์์ ํฉ๋๋ค. Form์
|
|
58
|
+
๊ทธ ์ค๋ฅ ๋ฌธ์์ด์ ๋ณต์ ํด์ ๋ค์ ๋ค์ง ์์ต๋๋ค.
|
|
59
|
+
- **form-level ์ค๋ฅ**(์๋ฒ ๊ฑฐ๋ถ, ๋คํธ์ํฌ)๋ง Form์ `failed` phase๊ฐ `message: string`
|
|
60
|
+
ํ๋๋ก ์์ ํฉ๋๋ค. `FormSubmitOutcome`์ `failed` variant์๋ ํ๋๋ณ ๋งคํ์ด ํ์
|
|
61
|
+
์์ค์์ ์์ ์กด์ฌํ์ง ์์ต๋๋ค โ ๊ฐ์ ์ฌ์ค์ ๋ ๊ณณ์ด ๋งํ๊ฒ ๋๋ ๊ฒฝ๋ก๋ฅผ ์์ฒ์ ์ผ๋ก
|
|
62
|
+
๋ง์ต๋๋ค.
|
|
63
|
+
- form-level ์ค๋ฅ๋ ๊ธฐ์กด Notice `tone="danger"` ๊ณ์ฝ์ผ๋ก ๋ ๋๋งํฉ๋๋ค. `formRecipe`๋
|
|
64
|
+
๊ทธ ๋ฐฐ์น ์์น(`fields` ๋ค์, `actions` ์ด์ )๋ง ๊ณ ์ ํ๊ณ ์์ ๋ค์ ์ ์ธํ์ง ์์ต๋๋ค.
|
|
65
|
+
|
|
66
|
+
### ์ ๊ทผ์ฑ โ ์คํจ ํ ํฌ์ปค์ค
|
|
67
|
+
|
|
68
|
+
์ ์ถ ์คํจ๋ ๋ ๊ฒฝ๋ก ์ค ํ๋์
๋๋ค.
|
|
69
|
+
|
|
70
|
+
1. **ํด๋ผ์ด์ธํธ ๊ฒ์ฆ ์คํจ** โ ์ ํ์ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ด์ `onSubmit`์ ๋ถ๋ฅด์ง
|
|
71
|
+
์๊ณ ํ๋๋ณ ์ค๋ฅ๋ง ๋จ๊น๋๋ค. Form์ ๊ฒ์ฆ์ ์คํํ์ง ์์ผ๋ฏ๋ก ์ด๋ ํ๋๊ฐ ์ฒซ
|
|
72
|
+
์ค๋ฅ์ธ์ง ์ค์ค๋ก ์ ์ ์์ต๋๋ค. ๋์ ์ ํ์ด ์์ ์ ํ๋ ๋ ๋ ์์์ ํ์ฌ ๋ฌดํจ
|
|
73
|
+
ํ๋ id ์งํฉ์ ๋๊ธฐ๋ฉด, `resolveFirstInvalidFieldFocusTarget`์ด **๋ ๋ ์์์
|
|
74
|
+
๊ฐ์ฅ ๋จผ์ ์ธ ๋ฌดํจ ํ๋**๋ฅผ ํ๋๋ก ์ ํฉ๋๋ค. ์ด ๋ต์ ์ ํ๋ ๊ท์น๋ง ๊ณต์ฉ์ด๊ณ , ํฌ์ปค์ค
|
|
75
|
+
์ด๋ ์์ฒด(Web `.focus()`, RN accessibility focus)๋ renderer๊ฐ ์คํํฉ๋๋ค.
|
|
76
|
+
2. **์ ์ถ ์คํจ**(์๋ฒ ๊ฑฐ๋ถ, ๋คํธ์ํฌ) โ ํน์ ํ๋๊ฐ ์์ผ๋ฏ๋ก ํฌ์ปค์ค๋ form-level
|
|
77
|
+
์ค๋ฅ ์ฌ๋กฏ์ผ๋ก ๊ฐ๊ณ , `formBehaviorDefaults.errorAnnouncementPriority`๊ฐ
|
|
78
|
+
`"high"`(Toast๊ฐ ์ด๋ฏธ ์ฐ๋ `normal | high` ์ดํ ์ฌ์ฌ์ฉ)๋ก assertive ๋ฐํ๋ฅผ
|
|
79
|
+
์๊ตฌํฉ๋๋ค.
|
|
80
|
+
|
|
81
|
+
์ด ๋ ๊ฒฝ๋ก๋ ํญ์ ์ํธ ๋ฐฐํ์ ์
๋๋ค โ ํด๋ผ์ด์ธํธ ๊ฒ์ฆ์ด ๋ง์๋ค๋ฉด `onSubmit`์ ์์
|
|
82
|
+
๋ถ๋ฆฌ์ง ์์ผ๋ฏ๋ก Form์ `failed` phase๋ ์๊ธฐ์ง ์์ต๋๋ค.
|
|
83
|
+
|
|
84
|
+
## HJM ๊ธฐ๋ณธ๊ฐ
|
|
85
|
+
|
|
86
|
+
- `formDefaults.density = "comfortable"` โ `fieldGap`์ comfortable(`spacing.lg`)์ด
|
|
87
|
+
compact(`spacing.sm`)๋ณด๋ค ๋์ต๋๋ค.
|
|
88
|
+
- anatomy๋ `["root", "field", "formError", "actions"]` ์์๋ก ๊ณ ์ ์ด๋ฉฐ prop์ผ๋ก ๋ฐ๊ฟ
|
|
89
|
+
์ ์์ต๋๋ค โ ๋ก๋๋งต์ "๋ชจ๋ ์กฐํฉ์ ์ด์ด๋์ง ์๋๋ค" ์์น์ ๊ทธ๋๋ก ๋ฐ๋ฆ
๋๋ค.
|
|
90
|
+
- `errorAnnouncementPriority = "high"`.
|
|
91
|
+
|
|
92
|
+
## ํ๋ซํผ ๋ฒ์ญ
|
|
93
|
+
|
|
94
|
+
- Web: ์คํจ ์ ์ฒซ ๋ฌดํจ ํ๋์ `.focus()`, form-level ์ค๋ฅ๋ `role="alert"` ๋๋
|
|
95
|
+
๋๋ฑํ `aria-live="assertive"` ์์ญ์ผ๋ก ๋ฐํ. `submitting` ์ค์๋ ์ ์ถ ๋ฒํผ๊ณผ ๋ชจ๋
|
|
96
|
+
ํ๋๊ฐ `aria-disabled`/`disabled`๋ก ์ฌ์
๋ ฅ์ ๋ง์ต๋๋ค(๊ฐ์ ๊ทธ๋๋ก ๋ณด์กด).
|
|
97
|
+
- React Native: ์คํจ ์ ์ฒซ ๋ฌดํจ ํ๋๋ก accessibility focus ์ด๋, form-level ์ค๋ฅ๋
|
|
98
|
+
live-region ๋๋ฑ๋ฌผ(`AccessibilityInfo.announceForAccessibility` ๋๋ ๋๋ฑ API)๋ก
|
|
99
|
+
๋ฐํ. `submitting` ์ค์๋ ์ ์ถ ๋ฒํผ์ด `accessibilityState.busy`๋ฅผ ์ป์ต๋๋ค.
|
|
100
|
+
|
|
101
|
+
## ๊ฒ์ฆ ํ๋ฉด
|
|
102
|
+
|
|
103
|
+
Form์ ์ด์ `beta`์
๋๋ค. BurnTok Web์
|
|
104
|
+
`apps/web/src/app/ideas/page.tsx`๊ฐ ์ค์ 2ํ๋ ์์ฑ ํ๋ฆ์์ ์๋ ๊ณ์ฝ์ ์๋นํฉ๋๋ค.
|
|
105
|
+
|
|
106
|
+
- `apps/web/src/lib/form-contract.ts`: `formRecipe` ๊ฐ๊ฒฉ, `createFormSubmitSession`,
|
|
107
|
+
`resolveFirstInvalidFieldFocusTarget`์ ์ ํ validation๊ณผ React lifecycle์ ์ฐ๊ฒฐํฉ๋๋ค.
|
|
108
|
+
- `apps/web/src/app/ideas/page.tsx`: ์ฒซ invalid control์ ์ค์ `.focus()`๋ฅผ ์คํํ๊ณ ,
|
|
109
|
+
field error์ `role="alert"` form-level error๋ฅผ ๋ถ๋ฆฌํ๋ฉฐ submitting ์ค ์ค๋ณต ์ ์ถ์
|
|
110
|
+
canonical session์ผ๋ก ์ฐจ๋จํฉ๋๋ค.
|
|
111
|
+
- `apps/web/src/components/ui/AppTextField.tsx`: input/textarea ref๋ฅผ ์ค์ control๊น์ง
|
|
112
|
+
์ ๋ฌํด focus ๊ณ์ฝ์ด ์ค๋ช
์ ๊ทธ์น์ง ์๊ฒ ํฉ๋๋ค.
|
|
113
|
+
|
|
114
|
+
Web ํ ์ ํ์ vertical slice๋ง์ผ๋ก `stable`์ ์ฃผ์ฅํ์ง ์์ต๋๋ค. Native renderer์
|
|
115
|
+
accessibility focus์ busy ๋ฐํ ์ฆ๊ฑฐ๊ฐ ์ถ๊ฐ๋๊ธฐ ์ ๊น์ง `beta`๋ฅผ ์ ์งํฉ๋๋ค.
|
|
116
|
+
|
|
117
|
+
## ๊ณต๊ฐํ์ง ์๊ธฐ๋ก ํ ๊ฒ
|
|
118
|
+
|
|
119
|
+
- **๊ฐ ์ํ ๊ด๋ฆฌ** โ ์ด๋ค ํ๋๊ฐ ๋ฌด์์ ๋ด๊ณ ์๋์ง, dirty/touched ์ฌ๋ถ๋ ์ ๋ถ ์ ํ
|
|
120
|
+
๋๋ React Hook Form์ด ์์ ํฉ๋๋ค. Form์ `submit(values)`์ ์ธ์๋ก๋ง ๊ฐ์
|
|
121
|
+
๋ฐ์ต๋๋ค.
|
|
122
|
+
- **ํ๋ ๋ฑ๋กยท์์กด์ฑยท์กฐ๊ฑด๋ถ ํ๋** โ antd์ `Form.Item name`/`dependencies`์ ํด๋นํ๋
|
|
123
|
+
๊ฐ๋
์ด ์์ต๋๋ค. ์ด๋ค ํ๋๊ฐ ๋ ๋๋๋์ง๋ ์ ํ์ React ํธ๋ฆฌ๊ฐ ๊ฒฐ์ ํฉ๋๋ค.
|
|
124
|
+
- **validateTrigger ์ ์ฑ
** โ ์ธ์ ๊ฒ์ฆ์ ์คํํ ์ง(`onChange`/`onBlur`/`onSubmit`)๋
|
|
125
|
+
์ ์ ์ผ๋ก ์ ํ์ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ์
๋๋ค.
|
|
126
|
+
- **`Form.List`(๋ฐ๋ณต ํ๋ ๊ทธ๋ฃน)** โ ๋ฐฐ์ด ํํ์ ๋ฐ๋ณต ์
๋ ฅ์ ๋ณ๋ ๋ฌธ์ ์ด๋ฉฐ, ํ์ฌ ์ด๋ค
|
|
127
|
+
์ค์ ํ๋ฉด๋ ์๊ตฌํ์ง ์์ ์์๋ก ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง๋ค์ง ์์ต๋๋ค.
|
|
128
|
+
- **๋ผ๋ฒจ ์์น ๋ณํ(์ํ/inline ๋ ์ด์์)** โ `Field`๊ฐ ๋ผ๋ฒจ-์ยท์ปจํธ๋กค-์๋ ํ๋์
|
|
129
|
+
๋ฌธ๋ฒ๋ง ์ง์ํ๋ฏ๋ก Form๋ antd์ `layout="horizontal"`์ ํด๋นํ๋ ๋ณํ์ ์ถ๊ฐํ์ง
|
|
130
|
+
์์ต๋๋ค. ํ์ํด์ง๋ฉด ๊ทธ๊ฒ์ ๋จผ์ `Field`์ ์ ๋ณํ์ด์ด์ผ ํฉ๋๋ค.
|
|
131
|
+
- **actions(์ ์ถ/์ทจ์ ๋ฒํผ) ๋ ์ด์์** โ ๋ฒํผ ๊ฐ๊ฒฉยท์ ๋ ฌ์ ๊ธฐ์กด Button/Stack์ ๋ชซ์
๋๋ค.
|
|
132
|
+
Stack์ด ์์ง ์ค์ ์ฌ์ฉ ์ฌ๋ก ์ ๊น์ง `planned` ์ด์์ผ๋ก ์น๊ฒฉํ์ง ์์ ๊ฒ๊ณผ ๊ฐ์
|
|
133
|
+
์ด์ ๋ก, Form๋ actions ์ฌ๋กฏ์ ์์น๋ง ๊ณ ์ ํ๊ณ ๊ทธ ์์ ๋ ์ด์์ ํ ํฐ์ ๋ง๋ค์ง
|
|
134
|
+
์์ต๋๋ค.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Component maturity and evidence manifest
|
|
2
|
+
|
|
3
|
+
> Generated from `@hjmds/design-contracts` 0.8.2. Do not edit this file directly; run `pnpm contracts:sync`.
|
|
4
|
+
|
|
5
|
+
This document is the human-readable projection of the same catalog and Showcase manifest consumed by product CI.
|
|
6
|
+
|
|
7
|
+
- Contract: stable 4 ยท beta 58 ยท planned 29
|
|
8
|
+
- Web renderer: beta 60 ยท planned 29 ยท unsupported 2
|
|
9
|
+
- Native renderer: beta 61 ยท planned 12 ยท unsupported 18
|
|
10
|
+
|
|
11
|
+
| Component | Canonical story ID | Contract | Web | Native | Documentation | Required evidence |
|
|
12
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
13
|
+
| Text | `foundation/text` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
14
|
+
| Icon | `foundation/icon` | beta | beta | beta | [authored](../icon.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
15
|
+
| Surface | `layout/surface` | stable | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
16
|
+
| Divider | `layout/divider` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
17
|
+
| Section | `layout/section` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
18
|
+
| Stack | `layout/stack` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
19
|
+
| Grid | `layout/grid` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, platform-parity |
|
|
20
|
+
| Layout | `layout/layout` | beta | beta | beta | [authored](../layout.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
21
|
+
| Masonry | `layout/masonry` | planned | planned | planned | generated only | contract: contract |
|
|
22
|
+
| Splitter | `layout/splitter` | planned | planned | unsupported | [authored](../splitter.md) | contract: contract |
|
|
23
|
+
| Button | `action/button` | stable | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
24
|
+
| IconButton | `action/icon-button` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
25
|
+
| Link | `action/link` | beta | beta | beta | [authored](../link.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
26
|
+
| BottomCTA | `action/bottom-cta` | beta | unsupported | beta | generated only | contract: contract; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
27
|
+
| FloatingActionButton | `action/floating-action-button` | planned | planned | planned | [authored](../floating-action-button.md) | contract: contract |
|
|
28
|
+
| Field | `input/field` | stable | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
29
|
+
| SearchField | `input/search-field` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
30
|
+
| TextArea | `input/text-area` | stable | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
31
|
+
| PasswordField | `input/password-field` | beta | beta | beta | [authored](../password-field.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
32
|
+
| OtpField | `input/otp-field` | beta | beta | beta | [authored](../otp-field.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
33
|
+
| Checkbox | `input/checkbox` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
34
|
+
| Radio | `input/radio` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
35
|
+
| CheckboxGroup | `input/checkbox-group` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
36
|
+
| RadioGroup | `input/radio-group` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
37
|
+
| Switch | `input/switch` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
38
|
+
| Chip | `input/chip` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
39
|
+
| SegmentedControl | `input/segmented-control` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
40
|
+
| Slider | `input/slider` | beta | beta | beta | [authored](../slider.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
41
|
+
| NumberField | `input/number-field` | beta | beta | beta | [authored](../number-field.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
42
|
+
| Select | `input/select` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
43
|
+
| Combobox | `input/combobox` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
44
|
+
| DatePicker | `input/date-picker` | beta | beta | beta | [authored](../date-picker.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
45
|
+
| TimePicker | `input/time-picker` | planned | planned | planned | [authored](../time-picker.md) | contract: contract |
|
|
46
|
+
| ColorPicker | `input/color-picker` | planned | planned | unsupported | [authored](../color-picker.md) | contract: contract |
|
|
47
|
+
| FilePicker | `input/file-picker` | beta | beta | beta | [authored](../file-picker.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
48
|
+
| Cascader | `input/cascader` | planned | planned | planned | [authored](../cascader.md) | contract: contract |
|
|
49
|
+
| Form | `input/form` | beta | beta | beta | [authored](../form.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
50
|
+
| Mentions | `input/mentions` | planned | planned | planned | [authored](../mentions.md) | contract: contract |
|
|
51
|
+
| Rating | `input/rating` | planned | planned | planned | [authored](../rating.md) | contract: contract |
|
|
52
|
+
| TransferList | `input/transfer-list` | planned | planned | planned | [authored](../transfer-list.md) | contract: contract |
|
|
53
|
+
| TreeSelect | `input/tree-select` | planned | planned | unsupported | [authored](../tree-select.md) | contract: contract |
|
|
54
|
+
| UploadItem | `data-display/upload-item` | beta | beta | beta | [authored](../upload-item.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
55
|
+
| Tabs | `navigation/tabs` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
56
|
+
| TopBar | `navigation/top-bar` | beta | unsupported | beta | generated only | contract: contract; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
57
|
+
| BottomNavigation | `navigation/bottom-navigation` | beta | beta | beta | [authored](../bottom-navigation.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
58
|
+
| Breadcrumb | `navigation/breadcrumb` | planned | planned | unsupported | [authored](../breadcrumb.md) | contract: contract |
|
|
59
|
+
| Pagination | `navigation/pagination` | planned | planned | unsupported | [authored](../pagination.md) | contract: contract |
|
|
60
|
+
| LoadMore | `navigation/load-more` | beta | beta | beta | [authored](../load-more.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
61
|
+
| Steps | `navigation/steps` | beta | beta | beta | [authored](../steps.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
62
|
+
| Menu | `navigation/menu` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
63
|
+
| Anchor | `navigation/anchor` | planned | planned | unsupported | [authored](../anchor.md) | contract: contract |
|
|
64
|
+
| Avatar | `data-display/avatar` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
65
|
+
| Badge | `data-display/badge` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
66
|
+
| CounterBadge | `data-display/counter-badge` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
67
|
+
| Card | `data-display/card` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
68
|
+
| List | `data-display/list` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
69
|
+
| ListRow | `data-display/list-row` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
70
|
+
| VirtualList | `data-display/virtual-list` | planned | planned | planned | [authored](../virtual-list.md) | contract: contract |
|
|
71
|
+
| Accordion | `data-display/accordion` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
72
|
+
| Statistic | `data-display/statistic` | beta | beta | beta | [authored](../statistic.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
73
|
+
| Timeline | `data-display/timeline` | beta | beta | beta | [authored](../timeline.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
74
|
+
| DataTable | `data-display/data-table` | planned | planned | unsupported | [authored](../data-table.md) | contract: contract |
|
|
75
|
+
| Tree | `data-display/tree` | planned | planned | unsupported | [authored](../tree.md) | contract: contract |
|
|
76
|
+
| Calendar | `data-display/calendar` | planned | planned | planned | [authored](../calendar.md) | contract: contract |
|
|
77
|
+
| Carousel | `data-display/carousel` | planned | planned | planned | [authored](../carousel.md) | contract: contract |
|
|
78
|
+
| DescriptionList | `data-display/description-list` | beta | beta | beta | [authored](../description-list.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
79
|
+
| Image | `data-display/image` | beta | beta | beta | [authored](../image.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
80
|
+
| QRCode | `data-display/qrcode` | planned | planned | planned | [authored](../qr-code.md) | contract: contract |
|
|
81
|
+
| Tag | `data-display/tag` | beta | beta | beta | [authored](../tag.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
82
|
+
| Tour | `overlay/tour` | planned | planned | unsupported | [authored](../tour.md) | contract: contract |
|
|
83
|
+
| EmptyState | `feedback/empty-state` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
84
|
+
| Notice | `feedback/notice` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
85
|
+
| Progress | `feedback/progress` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
86
|
+
| Spinner | `feedback/spinner` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
87
|
+
| Skeleton | `feedback/skeleton` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
88
|
+
| Result | `feedback/result` | beta | beta | beta | [authored](../result.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
89
|
+
| Toast | `feedback/toast` | beta | beta | beta | [authored](../toast.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
90
|
+
| Watermark | `feedback/watermark` | planned | planned | unsupported | [authored](../watermark.md) | contract: contract |
|
|
91
|
+
| Dialog | `overlay/dialog` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
92
|
+
| AlertDialog | `overlay/alert-dialog` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
93
|
+
| Sheet | `overlay/sheet` | beta | beta | beta | generated only | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard, platform-parity |
|
|
94
|
+
| SidePanel | `overlay/side-panel` | planned | planned | unsupported | [authored](../side-panel.md) | contract: contract |
|
|
95
|
+
| Popover | `overlay/popover` | planned | planned | unsupported | [authored](../popover.md) | contract: contract |
|
|
96
|
+
| ConfirmPopover | `overlay/confirm-popover` | planned | planned | unsupported | [authored](../confirm-popover.md) | contract: contract |
|
|
97
|
+
| Tooltip | `overlay/tooltip` | beta | beta | unsupported | [authored](../tooltip.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
98
|
+
| CommandPalette | `overlay/command-palette` | planned | planned | unsupported | [authored](../command-palette.md) | contract: contract |
|
|
99
|
+
| Affix | `utility/affix` | planned | planned | unsupported | [authored](../affix.md) | contract: contract |
|
|
100
|
+
| AppProvider | `provider/app-provider` | planned | planned | planned | [authored](../app-provider.md) | contract: contract |
|
|
101
|
+
| BorderBeam | `utility/border-beam` | planned | planned | unsupported | [authored](../border-beam.md) | contract: contract |
|
|
102
|
+
| DesignSystemProvider | `provider/design-system-provider` | beta | beta | beta | [authored](../design-system-provider.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
103
|
+
| Utility | `utility/utility` | planned | planned | unsupported | [authored](../utility.md) | contract: contract |
|