@hjmds/design-contracts 1.30.0 → 1.32.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.
Files changed (102) hide show
  1. package/dist/behaviors.d.ts +3 -0
  2. package/dist/behaviors.d.ts.map +1 -1
  3. package/dist/bottom-navigation.d.ts +43 -0
  4. package/dist/bottom-navigation.d.ts.map +1 -1
  5. package/dist/bottom-navigation.js +55 -0
  6. package/dist/bottom-navigation.js.map +1 -1
  7. package/dist/carousel.d.ts +30 -0
  8. package/dist/carousel.d.ts.map +1 -1
  9. package/dist/carousel.js +32 -0
  10. package/dist/carousel.js.map +1 -1
  11. package/dist/catalog.d.ts +178 -1
  12. package/dist/catalog.d.ts.map +1 -1
  13. package/dist/catalog.js +16 -6
  14. package/dist/catalog.js.map +1 -1
  15. package/dist/component-recipes.d.ts +126 -0
  16. package/dist/component-recipes.d.ts.map +1 -1
  17. package/dist/component-recipes.js +71 -2
  18. package/dist/component-recipes.js.map +1 -1
  19. package/dist/icon.d.ts +58 -1
  20. package/dist/icon.d.ts.map +1 -1
  21. package/dist/icon.js +69 -0
  22. package/dist/icon.js.map +1 -1
  23. package/dist/image-choice.d.ts +47 -0
  24. package/dist/image-choice.d.ts.map +1 -1
  25. package/dist/image-choice.js +56 -0
  26. package/dist/image-choice.js.map +1 -1
  27. package/dist/index.d.ts +3 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/pagination.d.ts +53 -0
  32. package/dist/pagination.d.ts.map +1 -1
  33. package/dist/pagination.js +48 -0
  34. package/dist/pagination.js.map +1 -1
  35. package/dist/recipes.d.ts +1 -1
  36. package/dist/recipes.d.ts.map +1 -1
  37. package/dist/recipes.js.map +1 -1
  38. package/dist/screen-patterns.d.ts +152 -2
  39. package/dist/screen-patterns.d.ts.map +1 -1
  40. package/dist/screen-patterns.js +132 -4
  41. package/dist/screen-patterns.js.map +1 -1
  42. package/dist/showcase.d.ts.map +1 -1
  43. package/dist/showcase.js +3 -0
  44. package/dist/showcase.js.map +1 -1
  45. package/dist/steps.d.ts +16 -7
  46. package/dist/steps.d.ts.map +1 -1
  47. package/dist/steps.js +6 -1
  48. package/dist/steps.js.map +1 -1
  49. package/dist/version.d.ts +1 -1
  50. package/dist/version.js +1 -1
  51. package/dist/version.js.map +1 -1
  52. package/docs/authoring-tools.md +1 -0
  53. package/docs/bottom-navigation.md +28 -0
  54. package/docs/carousel.md +8 -0
  55. package/docs/data-workflows.md +1 -0
  56. package/docs/dialog.md +23 -0
  57. package/docs/generated/component-maturity.md +7 -4
  58. package/docs/generated/renderer-evidence.json +317 -19
  59. package/docs/generated/renderer-evidence.md +9 -3
  60. package/docs/generated/showcase-manifest.json +164 -6
  61. package/docs/icon.md +9 -0
  62. package/docs/pagination.md +17 -0
  63. package/docs/screen-patterns.md +55 -1
  64. package/docs/steps.md +4 -3
  65. package/docs/toast.md +10 -0
  66. package/docs/usage/README.md +5 -2
  67. package/docs/usage/SELECTION.md +1 -1
  68. package/docs/usage/components/auth-screen-layout.md +15 -5
  69. package/docs/usage/components/bottom-cta.md +11 -0
  70. package/docs/usage/components/bottom-navigation.md +99 -2
  71. package/docs/usage/components/card.md +36 -5
  72. package/docs/usage/components/carousel.md +1 -0
  73. package/docs/usage/components/chat-date-separator.md +86 -0
  74. package/docs/usage/components/chat-message.md +13 -1
  75. package/docs/usage/components/chat-screen.md +3 -2
  76. package/docs/usage/components/comment-thread-row.md +11 -3
  77. package/docs/usage/components/comment-thread-screen.md +1 -1
  78. package/docs/usage/components/dialog.md +69 -0
  79. package/docs/usage/components/editor-screen.md +6 -2
  80. package/docs/usage/components/field.md +13 -0
  81. package/docs/usage/components/icon-tile.md +19 -3
  82. package/docs/usage/components/icon.md +45 -6
  83. package/docs/usage/components/image-choice-group.md +35 -4
  84. package/docs/usage/components/media-selection-screen.md +20 -1
  85. package/docs/usage/components/message-composer.md +4 -1
  86. package/docs/usage/components/moderation-screen.md +107 -2
  87. package/docs/usage/components/page-indicator.md +102 -0
  88. package/docs/usage/components/pagination.md +28 -4
  89. package/docs/usage/components/profile-screen.md +9 -3
  90. package/docs/usage/components/profile-summary.md +3 -3
  91. package/docs/usage/components/screen-layout.md +15 -3
  92. package/docs/usage/components/search-screen.md +5 -3
  93. package/docs/usage/components/steps.md +14 -7
  94. package/docs/usage/components/tabs.md +21 -1
  95. package/docs/usage/components/text.md +30 -1
  96. package/docs/usage/components/toast.md +5 -0
  97. package/docs/usage/components/typing-indicator.md +89 -0
  98. package/docs/usage/screens/common-login.md +3 -1
  99. package/docs/usage/screens/common-profile.md +3 -3
  100. package/docs/usage/screens/flow-editor.md +13 -2
  101. package/docs/usage/screens/flow-moderation.md +31 -3
  102. package/package.json +1 -1
@@ -4,6 +4,7 @@
4
4
 
5
5
  `@hjmds/design-contracts/authoring-tools`, `@hjmds/react/authoring-tools`,
6
6
  `@hjmds/react-native/authoring-tools` 선택 subpath로 제공한다.
7
+ Native BezierEditor는 곡선을 optional peer `react-native-svg@15.15.5`로 그린다. 이 subpath를 쓰는 앱은 peer를 설치한다(2026-10-18 Metro 번들 검사 복구 때 확인).
7
8
 
8
9
  ## BezierEditor (Web·Native)
9
10
 
@@ -180,3 +180,31 @@ floating 그림자는 그리지 않는다. 옆면이 높이를 표현하므로
180
180
  팔레트에 "눌린 브랜드" 역할이 없어서 새 역할을 추가하지 않고 기존 역할을 겹쳐 쓴다.
181
181
  선택하지 않은 카드도 같은 두께의 투명 테두리를 둔다. 그래서 선택이 바뀌어도 아이콘·라벨 줄이 움직이지 않는다.
182
182
  제품은 나무 같은 색을 surfaceAlt·borderControl 팔레트 역할로 공급한다. deprecated 시각 style로 덮지 않는다.
183
+
184
+ ### 덮인 높이·솟은 가운데 목적지·앱 아이콘 자리 (2026-10-18)
185
+
186
+ 세 제품이 막대를 우회한 원인을 계약으로 옮겼다. Spint는 떠 있는 막대의 높이를 몰라 탭 화면마다 112 빈칸을 두었다.
187
+ `BottomNavigationInsetProvider`·`useBottomNavigationInset`이 겹친 막대(Web 고정, Native `placement="overlay"`)의
188
+ 측정 높이를 화면에 전달하고 ScreenLayout이 마지막 영역 여백으로 쓴다. Native 기본 `inline`은 자기 높이를 차지하므로 0이다.
189
+ 이 여백은 ScreenLayout만 적용한다(1.32.0 patch): `scroll="content"` 목록과 ScreenLayout 위의 화면 구성은 다시 더하지 않는다.
190
+ 1.31.0 사용 지침이 `scroll="content"` 목록에 더하라고 잘못 안내해 따르면 두 번 쌓였다.
191
+ 다에리는 가운데 "쓰기" 목적지를 그리려고 기본 탭바로 돌아갔다. 항목 `prominent`는 홀수 개의 정가운데 하나만 허용하고,
192
+ `primaryAction`(행동)과 달리 선택·재선택이 있는 목적지다. 원은 `prominentDestination` recipe(지름 56, `action.brand`)를 쓰고
193
+ 라벨이 다른 라벨과 한 줄이 되도록 `지름 − 표시 자리 높이`만큼 올라간다. Utilverse는 큰 앱 아이콘 때문에 막대를 직접
194
+ 조립했다. `configuration.iconSize`(`large` 44 · `xlarge` 52)가 `renderIcon`의 `size`를 키운다. 세 축 모두 기본값에서 기존 외형이 그대로다.
195
+
196
+ ### 테마별 틀과 선택 아이콘 올림 (2026-10-18, 1.32.0)
197
+
198
+ Utilverse는 1.31.0 채택 뒤에도 셸마다 다른 막대 틀(둥근 독·알약·작은 독·각진 작업 표시줄)과 선택 아이콘 올림을
199
+ 표현할 공개 축이 없어 다섯 셸을 floating 하나로 통일했다. 제품이 막대를 다시 조립하지 않도록 두 축을 더했다.
200
+
201
+ - `configuration.shape`(`standard` 기본 · `rounded` · `pill` · `compact` · `square`)는 floating 표면의 모서리 token과
202
+ 안쪽 여백을 `bottomNavigationRecipe.shapes`에서 고른다. `standard`는 `presentations.floating` 그대로다.
203
+ bar는 화면 너비를 채우고 capsule은 이미 알약이며 tile 선택은 자기 안쪽 여백·카드 모서리를 가지므로
204
+ `presentation: "floating"`·`selection: "emphasis"`에서만 허용한다. Native floating 끝 항목의 눌림 모서리는
205
+ `틀 radius − 테두리 − 안쪽 여백`으로 틀의 안쪽 곡선을 따른다(2026-10-08 pressed-edge 규칙의 일반화).
206
+ - `configuration.iconEmphasis`(`scale` 기본 · `lift`)는 선택 아이콘 강조다. `lift`는 공통 선택 배율 위에 선택 아이콘을
207
+ 4 올리고(`icon.liftEmphasis.translateY`) 선택하지 않은 아이콘만 0.82로 흐린다. 색을 입힐 수 없는 앱 아이콘 그림에서
208
+ 라벨 외의 비색상 선택 근거가 된다. 배지와 `prominent` 원은 흐리지 않는다.
209
+ - 막대 바탕색은 기존 팔레트 역할(canvas)이고 테마별 색은 `brandPalette`로 바꾼다. 높이는 `density`와 `iconSize`가 정한다.
210
+ 같은 의미의 값을 새 축으로 중복하지 않았다.
package/docs/carousel.md CHANGED
@@ -153,3 +153,11 @@ Native 위치 제어는 숫자 버튼으로 표현해 현재 위치를 눈으로
153
153
  자동재생은 선택 기능이며 기본 화면 예제는 수동이다. Web browser 및 Native renderer
154
154
  테스트는 숨김·key 유지·경계·controlled 요청·RTL·자동재생 중지와 swipe/접근성 action을
155
155
  검증한다. Native 기기 제스처·스크린 리더 실측은 별도이며 이 증거로 stable 승격하지 않는다.
156
+
157
+ ## PageIndicator (2026-10-18)
158
+
159
+ Carousel의 위치 점 줄을 `PageIndicator`로 공개했다. 제품이 페이저와 페이지 내용을 직접 소유하는 자리(Utilverse 홈 런처의
160
+ Native 페이징 목록)에서 같은 점·같은 끝 멈춤 이동을 쓰게 하려는 것이다. 계약은 `resolvePageIndicator`(점 이름은
161
+ `composeAccessibleName`으로 제품이 짓는다)와 `getPageIndicatorTarget`(순환 없이 끝에서 멈춤)이고 recipe는 `carouselRecipe.dot`
162
+ 그대로다. Carousel도 같은 점 줄을 렌더한다(Web 내부 공유 컴포넌트, Native `PageIndicator`). Native는 줄 하나가 adjustable
163
+ 요소이고 Web은 group 안의 점 버튼이며 ←/→로 한 페이지씩 요청한다.
@@ -6,6 +6,7 @@ Lucian 130·160–164를 검토하면서 기존 표·차트·통계의 실제
6
6
  별도의 표/차트 엔진을 만들지 않고 DataTable, BarChart, Statistic, Progress, Select를 합성한다.
7
7
  MatrixTable은 팀 간 비교에서 대각선을 숨기는 계약이므로 직사각형 코호트나 자기상관 보존에 쓰지 않는다.
8
8
  공개 진입점은 `@hjmds/{react,react-native}/data-workflows`, 계산은 `@hjmds/design-contracts/data-workflows`다.
9
+ Native 진입점은 BarChart(`/chart`)를 합성하므로 `/chart`와 같은 optional peer `react-native-svg@15.15.5`가 필요하다(2026-10-18 Metro 번들 검사 복구 때 확인).
9
10
 
10
11
  | API | 계약과 선택 기준 |
11
12
  | --- | --- |
package/docs/dialog.md CHANGED
@@ -64,3 +64,26 @@ enter duration, falling back to ordinary presentation if the host fails to reply
64
64
  spatial interpolation. Device geometry, resizing/keyboard behavior, themes and performance remain
65
65
  experimental until the QA report verifies them. See the usage guide and
66
66
  [origin transition QA](../../../docs/qa/2026-10-07-overlay-origin-transition.md).
67
+
68
+ ## Decorative layer and immersive presentation (1.31.0)
69
+
70
+ 2026-10-18 product gaps: BurnTok kept a raw RN Modal for a folder popup because its drag ghost had to be drawn
71
+ in window coordinates outside the card, and utilverse kept one for a display board because every HJM overlay
72
+ drew a card or a framed sheet. Both reused nothing of the modal stack, focus return or dismissal contract.
73
+
74
+ - `overlayLayer` is a viewport/window-sized sibling of the card inside the same modal. It is decorative by
75
+ contract: no pointer input, hidden from assistive technology (Web `inert` + `aria-hidden`, Native
76
+ `pointerEvents="none"` + `no-hide-descendants`). Interactive content stays in `children`, inside the focus trap.
77
+ - `scrollEnabled` (default `true`) temporarily locks user scrolling of the dialog while a gesture in the body
78
+ owns pointer movement (the same folder drag): Web sets the card to `overflow: hidden` and keeps its offset, Native
79
+ disables the bounded body ScrollView. It is a temporary lock, not a way to clip content.
80
+ - `ImmersiveOverlay` is a Dialog companion with no card, scrim, header or gutter: a product stage edge to edge
81
+ and a control bar (status, tools, a localized exit action). It keeps the shared modal stack, focus trap,
82
+ background isolation, focus return and the entry-focus wait of screens below. Web reports `escape` or
83
+ `exit-action`; Native reports `back` or `exit-action`. Native presents full screen with the status bar hidden
84
+ and rotation allowed (`dialogRecipe.immersive`). Web does not request the Fullscreen API (user activation,
85
+ Escape consumed by the browser, no element fullscreen on iOS Safari).
86
+
87
+ Renderer proof: `immersive-overlay.browser.test.tsx` (geometry, exit focus, Escape, focus return, inert layer)
88
+ and `immersive-overlay.test.tsx` (Modal presentation, status bar, orientations, reasons, overlay-stack wait,
89
+ layer placement). Device rotation and status bar behavior are unverified on hardware.
@@ -1,12 +1,12 @@
1
1
  # Component maturity and evidence manifest
2
2
 
3
- > Generated from `@hjmds/design-contracts` 1.30.0. Do not edit this file directly; run `pnpm contracts:sync`.
3
+ > Generated from `@hjmds/design-contracts` 1.32.0. 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 125 · beta 2
8
- - Web renderer: stable 125 · beta 2
9
- - Native renderer: stable 105 · beta 4 · unsupported 18
7
+ - Contract: stable 125 · beta 5
8
+ - Web renderer: stable 125 · beta 5
9
+ - Native renderer: stable 105 · beta 7 · unsupported 18
10
10
 
11
11
  | Component | Canonical story ID | Contract | Web | Native | Documentation | Required evidence |
12
12
  | --- | --- | --- | --- | --- | --- | --- |
@@ -65,6 +65,7 @@ This document is the human-readable projection of the same catalog and Showcase
65
65
  | Sidebar | `navigation/sidebar` | stable | stable | unsupported | [authored](../sidebar.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
66
66
  | BottomNavigation | `navigation/bottom-navigation` | stable | stable | stable | [authored](../bottom-navigation.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, native-actions |
67
67
  | Breadcrumb | `navigation/breadcrumb` | stable | stable | unsupported | [authored](../breadcrumb.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
68
+ | PageIndicator | `navigation/page-indicator` | beta | beta | beta | generated only | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility; native: default, dark, large-text, rtl, reduced-motion, accessibility |
68
69
  | Pagination | `navigation/pagination` | stable | stable | beta | [authored](../pagination.md) | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, large-text, rtl, reduced-motion, accessibility, native-actions |
69
70
  | LoadMore | `navigation/load-more` | stable | stable | stable | [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, native-actions |
70
71
  | Steps | `navigation/steps` | stable | stable | stable | [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 |
@@ -130,6 +131,8 @@ This document is the human-readable projection of the same catalog and Showcase
130
131
  | MediaSelectionScreen | `layout/media-selection-screen` | 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 |
131
132
  | ProfileScreen | `layout/profile-screen` | 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 |
132
133
  | ChatMessage | `data-display/chat-message` | 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 |
134
+ | TypingIndicator | `feedback/typing-indicator` | beta | beta | beta | generated only | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility; native: default, dark, large-text, rtl, reduced-motion, accessibility |
135
+ | ChatDateSeparator | `data-display/chat-date-separator` | 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 |
133
136
  | NotificationRow | `data-display/notification-row` | 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 |
134
137
  | NotificationItem | `data-display/notification-item` | 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 |
135
138
  | CommentThreadRow | `data-display/comment-thread-row` | 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 |
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "designSystemVersion": "1.30.0",
3
+ "designSystemVersion": "1.32.0",
4
4
  "source": "packages/design-contracts/docs/generated/showcase-manifest.json",
5
5
  "surfaces": {
6
6
  "web": {
7
7
  "packageName": "@hjmds/react",
8
- "packageVersion": "1.30.0",
9
- "activeComponents": 127,
10
- "claimedComponents": 127,
11
- "completeScenarioComponents": 126,
8
+ "packageVersion": "1.32.0",
9
+ "activeComponents": 130,
10
+ "claimedComponents": 130,
11
+ "completeScenarioComponents": 129,
12
12
  "components": [
13
13
  {
14
14
  "componentId": "text",
@@ -2942,7 +2942,8 @@
2942
2942
  "claimed": true,
2943
2943
  "subpath": "./navigation",
2944
2944
  "exportNames": [
2945
- "BottomNavigation"
2945
+ "BottomNavigation",
2946
+ "BottomNavigationInsetProvider"
2946
2947
  ],
2947
2948
  "proofs": [
2948
2949
  {
@@ -3053,6 +3054,53 @@
3053
3054
  ],
3054
3055
  "missingScenarios": []
3055
3056
  },
3057
+ {
3058
+ "componentId": "page-indicator",
3059
+ "name": "PageIndicator",
3060
+ "status": "beta",
3061
+ "claimed": true,
3062
+ "subpath": "./carousel",
3063
+ "exportNames": [
3064
+ "PageIndicator"
3065
+ ],
3066
+ "proofs": [
3067
+ {
3068
+ "scenarios": [
3069
+ "default"
3070
+ ],
3071
+ "file": "test/default-render.ssr.test.tsx",
3072
+ "caseId": "page-indicator"
3073
+ },
3074
+ {
3075
+ "scenarios": [
3076
+ "dark",
3077
+ "large-text",
3078
+ "rtl",
3079
+ "reduced-motion",
3080
+ "accessibility"
3081
+ ],
3082
+ "file": "test/scenario-matrix.browser.test.tsx",
3083
+ "caseId": "page-indicator"
3084
+ }
3085
+ ],
3086
+ "requiredScenarios": [
3087
+ "default",
3088
+ "dark",
3089
+ "large-text",
3090
+ "rtl",
3091
+ "reduced-motion",
3092
+ "accessibility"
3093
+ ],
3094
+ "claimedScenarios": [
3095
+ "default",
3096
+ "dark",
3097
+ "large-text",
3098
+ "rtl",
3099
+ "reduced-motion",
3100
+ "accessibility"
3101
+ ],
3102
+ "missingScenarios": []
3103
+ },
3056
3104
  {
3057
3105
  "componentId": "pagination",
3058
3106
  "name": "Pagination",
@@ -5133,7 +5181,8 @@
5133
5181
  "claimed": true,
5134
5182
  "subpath": "./overlays",
5135
5183
  "exportNames": [
5136
- "Dialog"
5184
+ "Dialog",
5185
+ "ImmersiveOverlay"
5137
5186
  ],
5138
5187
  "proofs": [
5139
5188
  {
@@ -6103,7 +6152,8 @@
6103
6152
  "claimed": true,
6104
6153
  "subpath": "./screen-flows",
6105
6154
  "exportNames": [
6106
- "ModerationScreen"
6155
+ "ModerationScreen",
6156
+ "ModerationForm"
6107
6157
  ],
6108
6158
  "proofs": [
6109
6159
  {
@@ -6353,7 +6403,8 @@
6353
6403
  "claimed": true,
6354
6404
  "subpath": "./screen-flows",
6355
6405
  "exportNames": [
6356
- "MediaSelectionScreen"
6406
+ "MediaSelectionScreen",
6407
+ "MediaSelectionCell"
6357
6408
  ],
6358
6409
  "proofs": [
6359
6410
  {
@@ -6453,7 +6504,8 @@
6453
6504
  "claimed": true,
6454
6505
  "subpath": "./screens",
6455
6506
  "exportNames": [
6456
- "ChatMessage"
6507
+ "ChatMessage",
6508
+ "MediaAlbumPageStatus"
6457
6509
  ],
6458
6510
  "proofs": [
6459
6511
  {
@@ -6496,6 +6548,103 @@
6496
6548
  ],
6497
6549
  "missingScenarios": []
6498
6550
  },
6551
+ {
6552
+ "componentId": "typing-indicator",
6553
+ "name": "TypingIndicator",
6554
+ "status": "beta",
6555
+ "claimed": true,
6556
+ "subpath": "./screens",
6557
+ "exportNames": [
6558
+ "TypingIndicator"
6559
+ ],
6560
+ "proofs": [
6561
+ {
6562
+ "scenarios": [
6563
+ "default"
6564
+ ],
6565
+ "file": "test/default-render.ssr.test.tsx",
6566
+ "caseId": "typing-indicator"
6567
+ },
6568
+ {
6569
+ "scenarios": [
6570
+ "dark",
6571
+ "large-text",
6572
+ "rtl",
6573
+ "reduced-motion",
6574
+ "accessibility"
6575
+ ],
6576
+ "file": "test/scenario-matrix.browser.test.tsx",
6577
+ "caseId": "typing-indicator"
6578
+ }
6579
+ ],
6580
+ "requiredScenarios": [
6581
+ "default",
6582
+ "dark",
6583
+ "large-text",
6584
+ "rtl",
6585
+ "reduced-motion",
6586
+ "accessibility"
6587
+ ],
6588
+ "claimedScenarios": [
6589
+ "default",
6590
+ "dark",
6591
+ "large-text",
6592
+ "rtl",
6593
+ "reduced-motion",
6594
+ "accessibility"
6595
+ ],
6596
+ "missingScenarios": []
6597
+ },
6598
+ {
6599
+ "componentId": "chat-date-separator",
6600
+ "name": "ChatDateSeparator",
6601
+ "status": "beta",
6602
+ "claimed": true,
6603
+ "subpath": "./screens",
6604
+ "exportNames": [
6605
+ "ChatDateSeparator"
6606
+ ],
6607
+ "proofs": [
6608
+ {
6609
+ "scenarios": [
6610
+ "default"
6611
+ ],
6612
+ "file": "test/default-render.ssr.test.tsx",
6613
+ "caseId": "chat-date-separator"
6614
+ },
6615
+ {
6616
+ "scenarios": [
6617
+ "dark",
6618
+ "long-copy",
6619
+ "large-text",
6620
+ "rtl",
6621
+ "reduced-motion",
6622
+ "accessibility"
6623
+ ],
6624
+ "file": "test/scenario-matrix.browser.test.tsx",
6625
+ "caseId": "chat-date-separator"
6626
+ }
6627
+ ],
6628
+ "requiredScenarios": [
6629
+ "default",
6630
+ "dark",
6631
+ "long-copy",
6632
+ "large-text",
6633
+ "rtl",
6634
+ "reduced-motion",
6635
+ "accessibility"
6636
+ ],
6637
+ "claimedScenarios": [
6638
+ "default",
6639
+ "dark",
6640
+ "long-copy",
6641
+ "large-text",
6642
+ "rtl",
6643
+ "reduced-motion",
6644
+ "accessibility"
6645
+ ],
6646
+ "missingScenarios": []
6647
+ },
6499
6648
  {
6500
6649
  "componentId": "notification-row",
6501
6650
  "name": "NotificationRow",
@@ -6850,10 +6999,10 @@
6850
6999
  },
6851
7000
  "native": {
6852
7001
  "packageName": "@hjmds/react-native",
6853
- "packageVersion": "1.30.0",
6854
- "activeComponents": 109,
6855
- "claimedComponents": 109,
6856
- "completeScenarioComponents": 106,
7002
+ "packageVersion": "1.32.0",
7003
+ "activeComponents": 112,
7004
+ "claimedComponents": 112,
7005
+ "completeScenarioComponents": 109,
6857
7006
  "components": [
6858
7007
  {
6859
7008
  "componentId": "text",
@@ -9550,7 +9699,8 @@
9550
9699
  "claimed": true,
9551
9700
  "subpath": "./top-bar",
9552
9701
  "exportNames": [
9553
- "BottomNavigation"
9702
+ "BottomNavigation",
9703
+ "BottomNavigationInsetProvider"
9554
9704
  ],
9555
9705
  "proofs": [
9556
9706
  {
@@ -9602,6 +9752,53 @@
9602
9752
  ],
9603
9753
  "missingScenarios": []
9604
9754
  },
9755
+ {
9756
+ "componentId": "page-indicator",
9757
+ "name": "PageIndicator",
9758
+ "status": "beta",
9759
+ "claimed": true,
9760
+ "subpath": "./carousel",
9761
+ "exportNames": [
9762
+ "PageIndicator"
9763
+ ],
9764
+ "proofs": [
9765
+ {
9766
+ "scenarios": [
9767
+ "default"
9768
+ ],
9769
+ "file": "test/default-render.test.tsx",
9770
+ "caseId": "page-indicator"
9771
+ },
9772
+ {
9773
+ "scenarios": [
9774
+ "dark",
9775
+ "large-text",
9776
+ "rtl",
9777
+ "reduced-motion",
9778
+ "accessibility"
9779
+ ],
9780
+ "file": "test/scenario-matrix.test.tsx",
9781
+ "caseId": "page-indicator"
9782
+ }
9783
+ ],
9784
+ "requiredScenarios": [
9785
+ "default",
9786
+ "dark",
9787
+ "large-text",
9788
+ "rtl",
9789
+ "reduced-motion",
9790
+ "accessibility"
9791
+ ],
9792
+ "claimedScenarios": [
9793
+ "default",
9794
+ "dark",
9795
+ "large-text",
9796
+ "rtl",
9797
+ "reduced-motion",
9798
+ "accessibility"
9799
+ ],
9800
+ "missingScenarios": []
9801
+ },
9605
9802
  {
9606
9803
  "componentId": "pagination",
9607
9804
  "name": "Pagination",
@@ -11317,7 +11514,8 @@
11317
11514
  "claimed": true,
11318
11515
  "subpath": "./overlays",
11319
11516
  "exportNames": [
11320
- "Dialog"
11517
+ "Dialog",
11518
+ "ImmersiveOverlay"
11321
11519
  ],
11322
11520
  "proofs": [
11323
11521
  {
@@ -11895,7 +12093,8 @@
11895
12093
  "claimed": true,
11896
12094
  "subpath": "./screen-flows",
11897
12095
  "exportNames": [
11898
- "ModerationScreen"
12096
+ "ModerationScreen",
12097
+ "ModerationForm"
11899
12098
  ],
11900
12099
  "proofs": [
11901
12100
  {
@@ -12145,7 +12344,8 @@
12145
12344
  "claimed": true,
12146
12345
  "subpath": "./screen-flows",
12147
12346
  "exportNames": [
12148
- "MediaSelectionScreen"
12347
+ "MediaSelectionScreen",
12348
+ "MediaSelectionCell"
12149
12349
  ],
12150
12350
  "proofs": [
12151
12351
  {
@@ -12245,7 +12445,8 @@
12245
12445
  "claimed": true,
12246
12446
  "subpath": "./screens",
12247
12447
  "exportNames": [
12248
- "ChatMessage"
12448
+ "ChatMessage",
12449
+ "MediaAlbumPageStatus"
12249
12450
  ],
12250
12451
  "proofs": [
12251
12452
  {
@@ -12288,6 +12489,103 @@
12288
12489
  ],
12289
12490
  "missingScenarios": []
12290
12491
  },
12492
+ {
12493
+ "componentId": "typing-indicator",
12494
+ "name": "TypingIndicator",
12495
+ "status": "beta",
12496
+ "claimed": true,
12497
+ "subpath": "./screens",
12498
+ "exportNames": [
12499
+ "TypingIndicator"
12500
+ ],
12501
+ "proofs": [
12502
+ {
12503
+ "scenarios": [
12504
+ "default"
12505
+ ],
12506
+ "file": "test/default-render.test.tsx",
12507
+ "caseId": "typing-indicator"
12508
+ },
12509
+ {
12510
+ "scenarios": [
12511
+ "dark",
12512
+ "large-text",
12513
+ "rtl",
12514
+ "reduced-motion",
12515
+ "accessibility"
12516
+ ],
12517
+ "file": "test/scenario-matrix.test.tsx",
12518
+ "caseId": "typing-indicator"
12519
+ }
12520
+ ],
12521
+ "requiredScenarios": [
12522
+ "default",
12523
+ "dark",
12524
+ "large-text",
12525
+ "rtl",
12526
+ "reduced-motion",
12527
+ "accessibility"
12528
+ ],
12529
+ "claimedScenarios": [
12530
+ "default",
12531
+ "dark",
12532
+ "large-text",
12533
+ "rtl",
12534
+ "reduced-motion",
12535
+ "accessibility"
12536
+ ],
12537
+ "missingScenarios": []
12538
+ },
12539
+ {
12540
+ "componentId": "chat-date-separator",
12541
+ "name": "ChatDateSeparator",
12542
+ "status": "beta",
12543
+ "claimed": true,
12544
+ "subpath": "./screens",
12545
+ "exportNames": [
12546
+ "ChatDateSeparator"
12547
+ ],
12548
+ "proofs": [
12549
+ {
12550
+ "scenarios": [
12551
+ "default"
12552
+ ],
12553
+ "file": "test/default-render.test.tsx",
12554
+ "caseId": "chat-date-separator"
12555
+ },
12556
+ {
12557
+ "scenarios": [
12558
+ "dark",
12559
+ "long-copy",
12560
+ "large-text",
12561
+ "rtl",
12562
+ "reduced-motion",
12563
+ "accessibility"
12564
+ ],
12565
+ "file": "test/scenario-matrix.test.tsx",
12566
+ "caseId": "chat-date-separator"
12567
+ }
12568
+ ],
12569
+ "requiredScenarios": [
12570
+ "default",
12571
+ "dark",
12572
+ "long-copy",
12573
+ "large-text",
12574
+ "rtl",
12575
+ "reduced-motion",
12576
+ "accessibility"
12577
+ ],
12578
+ "claimedScenarios": [
12579
+ "default",
12580
+ "dark",
12581
+ "long-copy",
12582
+ "large-text",
12583
+ "rtl",
12584
+ "reduced-motion",
12585
+ "accessibility"
12586
+ ],
12587
+ "missingScenarios": []
12588
+ },
12291
12589
  {
12292
12590
  "componentId": "notification-row",
12293
12591
  "name": "NotificationRow",
@@ -1,11 +1,11 @@
1
1
  # Renderer evidence coverage
2
2
 
3
- > Generated for HJM 1.30.0. Do not edit directly; run `pnpm evidence:sync`.
3
+ > Generated for HJM 1.32.0. Do not edit directly; run `pnpm evidence:sync`.
4
4
 
5
5
  This projection joins the canonical surface maturity manifest with first-party renderer claims. Missing scenarios are explicit beta promotion debt; stable surfaces are blocked by CI until none remain.
6
6
 
7
- - web: 127/127 active implementations; 126/127 required scenario sets
8
- - native: 109/109 active implementations; 106/109 required scenario sets
7
+ - web: 130/130 active implementations; 129/130 required scenario sets
8
+ - native: 112/112 active implementations; 109/112 required scenario sets
9
9
 
10
10
  | Component | Surface | Maturity | Renderer package | Export | Claimed scenarios | Missing required scenarios | Executable proofs |
11
11
  | --- | --- | --- | --- | --- | --- | --- | --- |
@@ -64,6 +64,7 @@ This projection joins the canonical surface maturity manifest with first-party r
64
64
  | Sidebar | web | stable | @hjmds/react | ./sidebar | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#sidebar, test/scenario-matrix.browser.test.tsx#sidebar, test/sidebar.browser.test.tsx#sidebar |
65
65
  | BottomNavigation | web | stable | @hjmds/react | ./navigation | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#bottom-navigation, test/scenario-matrix.browser.test.tsx#bottom-navigation, test/bottom-navigation.keyboard.browser.test.tsx#bottom-navigation |
66
66
  | Breadcrumb | web | stable | @hjmds/react | ./breadcrumb | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#breadcrumb, test/scenario-matrix.browser.test.tsx#breadcrumb, test/page-navigation.browser.test.tsx#breadcrumb |
67
+ | PageIndicator | web | beta | @hjmds/react | ./carousel | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#page-indicator, test/scenario-matrix.browser.test.tsx#page-indicator |
67
68
  | Pagination | web | stable | @hjmds/react | ./pagination | default, dark, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#pagination, test/scenario-matrix.browser.test.tsx#pagination, test/pagination.keyboard.browser.test.tsx#pagination |
68
69
  | LoadMore | web | stable | @hjmds/react | ./navigation | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#load-more, test/scenario-matrix.browser.test.tsx#load-more, test/load-more.interactions.browser.test.tsx#load-more |
69
70
  | Steps | web | stable | @hjmds/react | ./steps | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#steps, test/scenario-matrix.browser.test.tsx#steps |
@@ -129,6 +130,8 @@ This projection joins the canonical surface maturity manifest with first-party r
129
130
  | MediaSelectionScreen | web | stable | @hjmds/react | ./screen-flows | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#media-selection-screen, test/scenario-matrix.browser.test.tsx#media-selection-screen |
130
131
  | ProfileScreen | web | stable | @hjmds/react | ./screen-flows | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#profile-screen, test/scenario-matrix.browser.test.tsx#profile-screen |
131
132
  | ChatMessage | web | stable | @hjmds/react | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#chat-message, test/scenario-matrix.browser.test.tsx#chat-message |
133
+ | TypingIndicator | web | beta | @hjmds/react | ./screens | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#typing-indicator, test/scenario-matrix.browser.test.tsx#typing-indicator |
134
+ | ChatDateSeparator | web | beta | @hjmds/react | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#chat-date-separator, test/scenario-matrix.browser.test.tsx#chat-date-separator |
132
135
  | NotificationRow | web | stable | @hjmds/react | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#notification-row, test/scenario-matrix.browser.test.tsx#notification-row |
133
136
  | NotificationItem | web | stable | @hjmds/react | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#notification-item, test/scenario-matrix.browser.test.tsx#notification-item |
134
137
  | CommentThreadRow | web | stable | @hjmds/react | ./screen-flows | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#comment-thread-row, test/scenario-matrix.browser.test.tsx#comment-thread-row |
@@ -186,6 +189,7 @@ This projection joins the canonical surface maturity manifest with first-party r
186
189
  | Tabs | native | stable | @hjmds/react-native | ./top-bar | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#tabs, test/scenario-matrix.test.tsx#tabs, test/tabs-actions.test.tsx#tabs |
187
190
  | TopBar | native | stable | @hjmds/react-native | ./top-bar | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#top-bar, test/scenario-matrix.test.tsx#top-bar |
188
191
  | BottomNavigation | native | stable | @hjmds/react-native | ./top-bar | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#bottom-navigation, test/scenario-matrix.test.tsx#bottom-navigation, test/bottom-navigation.interaction.test.tsx#bottom-navigation |
192
+ | PageIndicator | native | beta | @hjmds/react-native | ./carousel | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#page-indicator, test/scenario-matrix.test.tsx#page-indicator |
189
193
  | Pagination | native | beta | @hjmds/react-native | ./pagination | default, dark, large-text, rtl, reduced-motion, accessibility | native-actions | test/default-render.test.tsx#pagination, test/scenario-matrix.test.tsx#pagination |
190
194
  | LoadMore | native | stable | @hjmds/react-native | ./top-bar | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#load-more, test/scenario-matrix.test.tsx#load-more, test/load-more.interactions.test.tsx#load-more |
191
195
  | Steps | native | stable | @hjmds/react-native | ./steps | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#steps, test/scenario-matrix.test.tsx#steps |
@@ -238,6 +242,8 @@ This projection joins the canonical surface maturity manifest with first-party r
238
242
  | MediaSelectionScreen | native | stable | @hjmds/react-native | ./screen-flows | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#media-selection-screen, test/scenario-matrix.test.tsx#media-selection-screen |
239
243
  | ProfileScreen | native | stable | @hjmds/react-native | ./screen-flows | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#profile-screen, test/scenario-matrix.test.tsx#profile-screen |
240
244
  | ChatMessage | native | stable | @hjmds/react-native | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#chat-message, test/scenario-matrix.test.tsx#chat-message |
245
+ | TypingIndicator | native | beta | @hjmds/react-native | ./screens | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#typing-indicator, test/scenario-matrix.test.tsx#typing-indicator |
246
+ | ChatDateSeparator | native | beta | @hjmds/react-native | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#chat-date-separator, test/scenario-matrix.test.tsx#chat-date-separator |
241
247
  | NotificationRow | native | stable | @hjmds/react-native | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#notification-row, test/scenario-matrix.test.tsx#notification-row |
242
248
  | NotificationItem | native | stable | @hjmds/react-native | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#notification-item, test/scenario-matrix.test.tsx#notification-item |
243
249
  | CommentThreadRow | native | stable | @hjmds/react-native | ./screen-flows | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#comment-thread-row, test/scenario-matrix.test.tsx#comment-thread-row |