@hjmds/design-contracts 0.8.2 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +17 -10
- package/dist/aspect-ratio.d.ts +31 -0
- package/dist/aspect-ratio.d.ts.map +1 -0
- package/dist/aspect-ratio.js +42 -0
- package/dist/aspect-ratio.js.map +1 -0
- package/dist/base-recipes.d.ts +1 -1
- package/dist/base-recipes.js +1 -1
- package/dist/base-recipes.js.map +1 -1
- package/dist/catalog.d.ts +102 -10
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +11 -5
- package/dist/catalog.js.map +1 -1
- package/dist/colors.d.ts +5 -1
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +7 -3
- package/dist/colors.js.map +1 -1
- package/dist/component-definitions.d.ts +3 -0
- package/dist/component-definitions.d.ts.map +1 -1
- package/dist/component-definitions.js +3 -0
- package/dist/component-definitions.js.map +1 -1
- package/dist/container.d.ts +40 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +43 -0
- package/dist/container.js.map +1 -0
- package/dist/icon-button-recipe.d.ts +1 -1
- package/dist/icon-button-recipe.js +1 -1
- package/dist/icon-button-recipe.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/recipes.d.ts +3 -0
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +3 -0
- package/dist/recipes.js.map +1 -1
- package/dist/semantic-colors.d.ts +5 -0
- package/dist/semantic-colors.d.ts.map +1 -1
- package/dist/semantic-colors.js +1 -0
- package/dist/semantic-colors.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/dist/visually-hidden.d.ts +21 -0
- package/dist/visually-hidden.d.ts.map +1 -0
- package/dist/visually-hidden.js +20 -0
- package/dist/visually-hidden.js.map +1 -0
- package/docs/architecture.md +3 -2
- package/docs/aspect-ratio.md +25 -0
- package/docs/consumer-policy.md +177 -0
- package/docs/container.md +24 -0
- package/docs/cross-platform-core-normalization.md +24 -7
- package/docs/generated/component-maturity.md +11 -8
- package/docs/generated/renderer-evidence.json +257 -25
- package/docs/generated/renderer-evidence.md +16 -11
- package/docs/generated/showcase-manifest.json +141 -9
- package/docs/identity.md +5 -2
- package/docs/library-gap-analysis.md +65 -0
- package/docs/migration-0.6.md +4 -0
- package/docs/migration-0.9.1.md +15 -0
- package/docs/stable-core.md +26 -0
- package/docs/visually-hidden.md +20 -0
- package/package.json +25 -2
- package/docs/consumer-release-gate.md +0 -90
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# HJM 소비 앱 정책
|
|
2
|
+
|
|
3
|
+
상태: **Normative**
|
|
4
|
+
정책 버전: **1.2.0**
|
|
5
|
+
적용 대상: 신규 HJM Web·React Native 앱과 기존 앱의 새 화면
|
|
6
|
+
|
|
7
|
+
이 정책 원문은 다음 package patch release부터
|
|
8
|
+
`@hjmds/design-contracts/consumer-policy.md` export에 포함됩니다. 아직 그 export를 포함하지
|
|
9
|
+
않는 `0.9.0` 소비자는 HJM-APP-STANDARD의 versioned profile과 catalog snapshot을 정책
|
|
10
|
+
근거로 사용하고, 존재하지 않는 `v0.9.0` 정책 URL을 만들어 내면 안 됩니다.
|
|
11
|
+
|
|
12
|
+
이 문서는 "HJM답게 보인다"를 특정 화면 복제로 정의하지 않습니다. 모든 제품이 공유해야
|
|
13
|
+
하는 것은 정보 위계, semantic role, 상태 피드백, 접근성 품질과 플랫폼별 행동입니다.
|
|
14
|
+
제품의 이름, 도메인 언어, 핵심 콘텐츠와 대표 브랜드 표현은 각 제품이 소유합니다.
|
|
15
|
+
|
|
16
|
+
`MUST`, `MUST NOT`, `SHOULD`, `MAY`는 각각 필수, 금지, 강한 권고, 선택을 뜻합니다.
|
|
17
|
+
|
|
18
|
+
## 1. 의존성과 버전
|
|
19
|
+
|
|
20
|
+
- 앱은 `@hjmds/design-contracts`와 한 renderer(`@hjmds/react` 또는
|
|
21
|
+
`@hjmds/react-native`)를 npm registry에서 설치해야 합니다(MUST).
|
|
22
|
+
- contracts와 renderer는 같은 정확한 SemVer여야 합니다(MUST). `^`, `~`, workspace·file,
|
|
23
|
+
Git ref와 tarball dependency는 허용하지 않습니다(MUST NOT).
|
|
24
|
+
- 앱 runtime은 granular subpath를 우선하고 catalog·showcase·evidence entry는 CI나
|
|
25
|
+
tooling에서만 사용해야 합니다(SHOULD).
|
|
26
|
+
|
|
27
|
+
## 2. 성숙도별 채택
|
|
28
|
+
|
|
29
|
+
| Catalog 상태 | 신규 앱 기본 정책 | 추가 조건 |
|
|
30
|
+
| --- | --- | --- |
|
|
31
|
+
| `stable` | 사용 가능 | 제품 흐름·copy 검증 |
|
|
32
|
+
| `beta` | 기본 비활성 | ADR, 앱 테스트, 실제 기기/브라우저 evidence |
|
|
33
|
+
| `planned` | 사용 금지 | HJM package에서 구현·승격한 뒤 채택 |
|
|
34
|
+
| `deprecated` | 신규 사용 금지 | 공지된 migration 기한 안에 제거 |
|
|
35
|
+
|
|
36
|
+
신규 앱 scaffold는 Stable Core만 기본 surface로 채택해야 합니다(MUST). Beta를 사용하려면
|
|
37
|
+
앱의 `docs/decisions/` 아래 ADR에 채택 이유, 대체안, 소유자, 검증 환경과 재검토 날짜를
|
|
38
|
+
기록해야 합니다(MUST).
|
|
39
|
+
|
|
40
|
+
### 2.1 Stable Core와 필수 foundation bridge
|
|
41
|
+
|
|
42
|
+
현재 Stable Core는 `Surface`, `Button`, `Field`, `TextArea` 네 surface입니다. `Text`,
|
|
43
|
+
`Icon`, `Stack`, `Container`, `DesignSystemProvider`처럼 첫 제품 화면에 필요한 foundation
|
|
44
|
+
일부는 catalog에서 여전히 `beta`입니다. 따라서 “첫 화면부터 HJM”을 요구하면서 이
|
|
45
|
+
foundation을 몰래 `stable`로 간주하거나 `betaAdoptions: []`로 기록하는 것은 허용하지
|
|
46
|
+
않습니다(MUST NOT).
|
|
47
|
+
|
|
48
|
+
HJM-APP-STANDARD가 versioned `requiredFoundations` 목록을 선언한 경우 다음 bridge를
|
|
49
|
+
적용합니다.
|
|
50
|
+
|
|
51
|
+
- 필수 foundation의 채택 이유와 최소 목록은 중앙 profile이 소유합니다. 앱마다 같은
|
|
52
|
+
선택 이유를 새로 발명하지 않습니다(MUST).
|
|
53
|
+
- 각 앱은 실제 adapter와 사용 환경에 대한 evidence를 소유합니다(MUST). `draft` /
|
|
54
|
+
`incubating` contract에서는 evidence가 `planned`일 수 있지만, `active` 또는 release gate는
|
|
55
|
+
timestamp가 있는 `verified` evidence 없이는 통과하면 안 됩니다(MUST NOT).
|
|
56
|
+
- 중앙 필수 목록 밖의 `beta`는 계속 제품별 optional adoption입니다. 제품 ADR, 대안,
|
|
57
|
+
제거·승격 조건과 verified app evidence가 모두 필요합니다(MUST).
|
|
58
|
+
- foundation이 catalog에서 `stable`로 승격되면 기존 표준의 의미를 조용히 바꾸지 않고
|
|
59
|
+
다음 versioned app profile에서 bridge 목록을 줄입니다(MUST).
|
|
60
|
+
|
|
61
|
+
이 bridge는 성숙도 예외가 아니라 공개된 임시 채택 계약입니다. catalog와 generated
|
|
62
|
+
maturity manifest에는 해당 surface가 계속 `beta`로 보여야 합니다.
|
|
63
|
+
|
|
64
|
+
## 3. 코드 경계
|
|
65
|
+
|
|
66
|
+
- 앱 root는 HJM Provider를 한 번 구성하고 theme, direction, text scale, reduce-motion 입력을
|
|
67
|
+
제품 설정과 연결해야 합니다(MUST).
|
|
68
|
+
- 화면은 원시 hex, 임의 spacing/radius/type scale을 새로 선언하지 않고 HJM semantic token
|
|
69
|
+
또는 제품 어댑터를 사용해야 합니다(MUST).
|
|
70
|
+
- 도메인 상태는 화면마다 색을 정하지 않고 제품 어댑터에서 HJM `AccentTone`과 component
|
|
71
|
+
variant에 매핑해야 합니다(MUST).
|
|
72
|
+
- HJM component의 `style` escape hatch는 배치용 margin, width, flex와 화면 composition에만
|
|
73
|
+
사용해야 합니다(SHOULD). color, typography, radius, control height와 interaction state를
|
|
74
|
+
덮어쓰는 용도로 사용하면 안 됩니다(MUST NOT).
|
|
75
|
+
- 플랫폼 primitive가 필요한 경우 접근성 또는 플랫폼 관습 때문에 필요한 adapter에
|
|
76
|
+
한정하고, 그 이유를 해당 adapter test로 고정해야 합니다(MUST).
|
|
77
|
+
|
|
78
|
+
### 3.1 React Native legacy style compatibility boundary
|
|
79
|
+
|
|
80
|
+
`@hjmds/react-native` 0.9.x의 공개 타입에는 `style`, `labelStyle`, `inputStyle`,
|
|
81
|
+
`containerStyle`과 여러 slot `*Style`처럼 전체 React Native style을 받는 호환 API가 남아
|
|
82
|
+
있습니다. 이 타입 범위와 caller-last 렌더 순서는 기존 소비자를 위한 집행 공백이지, 앞 절의
|
|
83
|
+
금지 속성을 제품이 덮어써도 된다는 허가가 아닙니다.
|
|
84
|
+
|
|
85
|
+
- 신규 앱과 기존 앱의 새 화면은 legacy raw style prop을 새로 사용하면 안 됩니다(MUST NOT).
|
|
86
|
+
컴포넌트가 `layoutStyle`을 제공하면 배치에는 그것만 사용하고, 제공하지 않으면 바깥
|
|
87
|
+
composition wrapper를 사용하거나 HJM에 semantic axis를 먼저 추가해야 합니다(MUST).
|
|
88
|
+
- `HjmCompositionStyle` / `layoutStyle`은 margin, width, flex 계열과 `alignSelf`만 노출하며
|
|
89
|
+
color, typography, padding, gap, border, radius, height, opacity, transform과 interaction
|
|
90
|
+
state key를 타입에서 제외합니다. 허용된 margin 값도 HJM spacing token 또는 검토된 제품
|
|
91
|
+
adapter에서 와야 합니다(MUST).
|
|
92
|
+
- 기존 화면의 legacy prop은 migration 기간에만 유지할 수 있습니다(MAY). controlled visual
|
|
93
|
+
key가 남아 있으면 정책 항목, 소유자, 대체 semantic API와 제거 train을 ADR에 기록해야
|
|
94
|
+
하며, 신규 사용으로 복사해서는 안 됩니다(MUST NOT).
|
|
95
|
+
- 0.9 호환 train에서는 등록 style ID와 배열을 런타임에서 필터링하거나 조용히 삭제하지
|
|
96
|
+
않습니다. 그러한 즉시 변경은 기존 앱의 레이아웃을 예측 불가능하게 깨뜨리기 때문입니다.
|
|
97
|
+
|
|
98
|
+
legacy raw style surface는 다음 조건이 모두 충족된 뒤 공지된 breaking train에서 제거합니다.
|
|
99
|
+
|
|
100
|
+
1. Stable Core가 canonical `layoutStyle` 또는 동등한 좁은 composition API를 제공한다.
|
|
101
|
+
2. HJM showcase와 관리 중인 앱이 새 API로 이동하고 light/dark, large text, RTL과 touch-target
|
|
102
|
+
evidence를 다시 검증한다.
|
|
103
|
+
3. 최소 한 fixed release train 동안 deprecation과 migration 문서를 제공한다.
|
|
104
|
+
4. 제거 Changeset이 영향을 받는 prop과 semantic 대안을 열거한다.
|
|
105
|
+
|
|
106
|
+
이 제거는 늦어도 첫 `1.0.0` train의 release gate 전에 완료해야 합니다(MUST). 그 전까지
|
|
107
|
+
legacy prop의 런타임 호환성은 유지하지만 신규 앱 적합성 검사에서는 실패로 취급합니다.
|
|
108
|
+
|
|
109
|
+
권장 구조는 다음과 같습니다. 실제 폴더명은 stack 관습에 맞춰도 역할은 유지합니다.
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
src/ui/hjm-provider.* 공통 환경 연결
|
|
113
|
+
src/ui/product-theme.* 제품 브랜드·도메인 semantic mapping
|
|
114
|
+
src/ui/components/* 제품 전용 composition과 플랫폼 adapter
|
|
115
|
+
src/features/* UI 계약을 소비하는 기능
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 4. 제품 정체성 경계
|
|
119
|
+
|
|
120
|
+
HJM이 소유하는 것:
|
|
121
|
+
|
|
122
|
+
- semantic color role과 light/dark 대비
|
|
123
|
+
- spacing, type scale, radius, motion, touch target
|
|
124
|
+
- component anatomy, 상태, 키보드·screen-reader 행동
|
|
125
|
+
- loading, empty, error, disabled, focus의 일관된 문법
|
|
126
|
+
|
|
127
|
+
제품이 소유하는 것:
|
|
128
|
+
|
|
129
|
+
- 이름, 로고, 대표 이미지와 illustration
|
|
130
|
+
- 제품 대표 accent·gradient와 도메인 상태 매핑
|
|
131
|
+
- 핵심 콘텐츠 밀도, 정보 우선순위와 feature composition
|
|
132
|
+
- 사용자에게 보이는 copy, i18n, navigation 정보 구조
|
|
133
|
+
|
|
134
|
+
`brandGradient`는 HJM 조직 surface와 fallback용입니다. 신규 제품이 이를 hero나 CTA의
|
|
135
|
+
기본값으로 그대로 채택할 의무는 없습니다. 제품 고유 gradient를 쓰는 경우 light/dark와
|
|
136
|
+
on-color 대비, 색에 의존하지 않는 상태 표지, reduce-motion을 제품 테스트로 검증해야
|
|
137
|
+
합니다(MUST).
|
|
138
|
+
|
|
139
|
+
## 5. 필수 검증과 evidence
|
|
140
|
+
|
|
141
|
+
앱 CI는 최소한 다음을 실패 조건으로 두어야 합니다(MUST).
|
|
142
|
+
|
|
143
|
+
1. contracts/renderer exact version 일치와 금지 dependency 형식 검사
|
|
144
|
+
2. versioned `requiredFoundations` 전체의 선언과 lifecycle에 맞는 app evidence 검사
|
|
145
|
+
3. HJM Provider 존재와 제품 theme adapter 존재 검사
|
|
146
|
+
4. 원시 색·간격·radius의 화면 레이어 유입 방지 검사
|
|
147
|
+
5. typecheck, unit/component test, production build
|
|
148
|
+
6. light/dark, 100–200% 글자 크기, LTR/RTL, reduce motion 중 앱이 지원한다고 선언한 환경
|
|
149
|
+
7. optional Beta component를 쓴다면 ADR과 해당 component·환경의 versioned consumer evidence
|
|
150
|
+
|
|
151
|
+
앱이 지원하지 않는 플랫폼이나 환경은 가짜 통과 script로 만들지 않고 app contract에서
|
|
152
|
+
`not-applicable`과 이유를 선언해야 합니다(MUST).
|
|
153
|
+
|
|
154
|
+
## 6. 예외와 변경 절차
|
|
155
|
+
|
|
156
|
+
필수 규칙의 예외는 암묵적으로 두지 않습니다. ADR에는 다음을 모두 기록해야 합니다.
|
|
157
|
+
|
|
158
|
+
- 위반하는 정책 항목과 사용자 가치
|
|
159
|
+
- 검토한 대안과 선택 이유
|
|
160
|
+
- 위험, 보완 테스트와 담당자
|
|
161
|
+
- 만료 또는 재검토 날짜
|
|
162
|
+
|
|
163
|
+
공통 API를 바꾸는 것이 한 제품의 local override보다 적절하면 제품 코드를 복제하지 않고
|
|
164
|
+
HJM에 Changeset과 Web/RN evidence를 먼저 제출합니다. 반대로 제품 의미가 들어가면 공통
|
|
165
|
+
package로 승격하지 않습니다.
|
|
166
|
+
|
|
167
|
+
## 7. 신규 앱 완료 조건
|
|
168
|
+
|
|
169
|
+
다음 질문에 모두 "예"라고 답할 수 있어야 HJM 채택이 완료된 것입니다.
|
|
170
|
+
|
|
171
|
+
- exact fixed-train dependency와 Provider가 CI에서 검증되는가?
|
|
172
|
+
- Stable은 기본 사용하고 필수 beta foundation은 중앙 목록+앱 evidence로, optional Beta는
|
|
173
|
+
제품 ADR+evidence로 구분되어 있는가?
|
|
174
|
+
- screen 코드가 semantic token·component를 우회하지 않는가?
|
|
175
|
+
- 같은 상태가 Web/RN에서 같은 의미와 자연스러운 플랫폼 행동을 갖는가?
|
|
176
|
+
- 로고를 제거해도 제품의 핵심 콘텐츠와 정보 구조가 다른 제품과 구분되는가?
|
|
177
|
+
- 제품 고유 표현을 제거해도 정보 위계·피드백·접근성에서는 HJM의 결이 남는가?
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Container contract
|
|
2
|
+
|
|
3
|
+
## 문제
|
|
4
|
+
|
|
5
|
+
Shell 내부가 아닌 화면에서도 읽기 폭, 일반 콘텐츠 폭, logical gutter를 반복해서 맞춰야 한다.
|
|
6
|
+
임의 `maxWidth`를 제품마다 복사하면 Web과 tablet Native가 서로 다른 리듬을 만든다.
|
|
7
|
+
|
|
8
|
+
## 계약
|
|
9
|
+
|
|
10
|
+
- size: `reading | content | full`
|
|
11
|
+
- gutter: `none | compact | regular | spacious`
|
|
12
|
+
- 항상 inline axis에서 가운데 정렬하며 RTL에서도 물리 방향을 노출하지 않는다.
|
|
13
|
+
|
|
14
|
+
Web은 `max-inline-size`, `margin-inline`, `padding-inline`으로 번역하고 Native는 centered
|
|
15
|
+
`View`, `maxWidth`, `paddingHorizontal`로 번역한다.
|
|
16
|
+
|
|
17
|
+
## 배제한 축
|
|
18
|
+
|
|
19
|
+
임의 px width, breakout, nested grid strategy는 공개하지 않는다. 반복되는 실제 제품 요구가
|
|
20
|
+
생기면 token 또는 별도 layout pattern으로 검토한다.
|
|
21
|
+
|
|
22
|
+
## 검증 화면
|
|
23
|
+
|
|
24
|
+
HJM Web/Native Foundations gallery에서 reading/content width와 large text wrapping을 검증한다.
|
|
@@ -82,6 +82,22 @@ edge를 항상 그린다.
|
|
|
82
82
|
|
|
83
83
|
호환 alias는 새 문서와 예제에서 사용하지 않는다. 제거는 major release에서만 한다.
|
|
84
84
|
|
|
85
|
+
## Collection and state vocabulary
|
|
86
|
+
|
|
87
|
+
공통 제품 코드에서 같은 역할은 같은 이름을 사용한다. Web을 기준으로 Native의 비파괴 호환
|
|
88
|
+
bridge를 추가했으며, 새 코드는 canonical 열만 사용한다.
|
|
89
|
+
|
|
90
|
+
| Component | Canonical Web/Native API | Deprecated Native alias |
|
|
91
|
+
| --- | --- | --- |
|
|
92
|
+
| Switch | `checked`, `defaultChecked`, `onCheckedChange` | `value`, `defaultValue`, `onValueChange` |
|
|
93
|
+
| RadioGroup | `items: RadioGroupItem[]` | `options: RadioOption[]` |
|
|
94
|
+
| SegmentedControl | `items: SegmentedControlItem[]` | `options: SegmentedControlOption[]` |
|
|
95
|
+
| Tabs | `items: TabItem[]`, item key `id` | `options: TabOption[]`, item key `value` |
|
|
96
|
+
| Select | `source`/`items`/`sections`, `selectedKey`, `defaultSelectedKey`, `onSelectionChange` | `options`, `value`, `defaultValue`, `onValueChange` |
|
|
97
|
+
|
|
98
|
+
한 인스턴스에서 canonical과 deprecated channel을 함께 전달하면 타입과 runtime 모두 실패한다.
|
|
99
|
+
이 규칙은 TypeScript를 우회하는 JavaScript 소비자에게도 결정적인 상태 모델을 보장한다.
|
|
100
|
+
|
|
85
101
|
## Reference application notes
|
|
86
102
|
|
|
87
103
|
상위 판단 원칙은 [library-reference-decisions.md](./library-reference-decisions.md)에만 둔다.
|
|
@@ -97,14 +113,15 @@ edge를 항상 그린다.
|
|
|
97
113
|
|
|
98
114
|
## Audited next migrations
|
|
99
115
|
|
|
100
|
-
|
|
101
|
-
합치지 않았다.
|
|
116
|
+
Accordion은 이름만 맞추면 의미가 오히려 불명확해져 이번 release에서 억지로 합치지 않았다.
|
|
102
117
|
|
|
103
|
-
-
|
|
104
|
-
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
|
|
118
|
+
- Web은 single/multiple mode에 따라 `value: string | string[]`, `allowsMultipleExpanded`,
|
|
119
|
+
`items[{id,title,panel}]`을 사용한다.
|
|
120
|
+
- Native는 항상 집합 형태인 `expandedValues: string[]`, `multiple`,
|
|
121
|
+
`items[{value,title,content}]`를 사용한다.
|
|
122
|
+
- 공통 descriptor의 key/content 이름과 single/multiple selection type을 먼저 결정한 뒤,
|
|
123
|
+
기존 두 모델을 deprecated alias로 격리해야 한다. host event/style 차이와 달리 이 상태 모델
|
|
124
|
+
차이는 다음 minor의 명시적 migration 대상이다.
|
|
108
125
|
|
|
109
126
|
## Intentional remaining differences
|
|
110
127
|
|
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
# Component maturity and evidence manifest
|
|
2
2
|
|
|
3
|
-
> Generated from `@hjmds/design-contracts` 0.
|
|
3
|
+
> Generated from `@hjmds/design-contracts` 0.9.1. Do not edit this file directly; run `pnpm contracts:sync`.
|
|
4
4
|
|
|
5
5
|
This document is the human-readable projection of the same catalog and Showcase manifest consumed by product CI.
|
|
6
6
|
|
|
7
|
-
- Contract: stable 4 · beta
|
|
8
|
-
- Web renderer: beta
|
|
9
|
-
- Native renderer: beta
|
|
7
|
+
- Contract: stable 4 · beta 61 · planned 29
|
|
8
|
+
- Web renderer: stable 4 · beta 59 · planned 29 · unsupported 2
|
|
9
|
+
- Native renderer: stable 4 · beta 59 · planned 12 · unsupported 19
|
|
10
10
|
|
|
11
11
|
| Component | Canonical story ID | Contract | Web | Native | Documentation | Required evidence |
|
|
12
12
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
13
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
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 |
|
|
15
|
+
| Surface | `layout/surface` | stable | stable | stable | 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
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
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
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
|
+
| Container | `layout/container` | beta | beta | beta | [authored](../container.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 |
|
|
20
|
+
| AspectRatio | `layout/aspect-ratio` | beta | beta | beta | [authored](../aspect-ratio.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 |
|
|
19
21
|
| 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
22
|
| 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
23
|
| Masonry | `layout/masonry` | planned | planned | planned | generated only | contract: contract |
|
|
22
24
|
| Splitter | `layout/splitter` | planned | planned | unsupported | [authored](../splitter.md) | contract: contract |
|
|
23
|
-
| Button | `action/button` | stable |
|
|
25
|
+
| Button | `action/button` | stable | stable | stable | 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
26
|
| 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
27
|
| 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
28
|
| BottomCTA | `action/bottom-cta` | beta | unsupported | beta | generated only | contract: contract; native: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|
|
27
29
|
| FloatingActionButton | `action/floating-action-button` | planned | planned | planned | [authored](../floating-action-button.md) | contract: contract |
|
|
28
|
-
| Field | `input/field` | stable |
|
|
30
|
+
| Field | `input/field` | stable | stable | stable | 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
31
|
| 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 |
|
|
32
|
+
| TextArea | `input/text-area` | stable | stable | stable | 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
33
|
| 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
34
|
| 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
35
|
| 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 |
|
|
@@ -101,3 +103,4 @@ This document is the human-readable projection of the same catalog and Showcase
|
|
|
101
103
|
| BorderBeam | `utility/border-beam` | planned | planned | unsupported | [authored](../border-beam.md) | contract: contract |
|
|
102
104
|
| 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
105
|
| Utility | `utility/utility` | planned | planned | unsupported | [authored](../utility.md) | contract: contract |
|
|
106
|
+
| VisuallyHidden | `utility/visually-hidden` | beta | beta | unsupported | [authored](../visually-hidden.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility |
|