@hjmds/design-contracts 1.46.1 → 1.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/behaviors.d.ts +2 -1
- package/dist/behaviors.d.ts.map +1 -1
- package/dist/bottom-navigation.d.ts +4 -0
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +12 -0
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/card.d.ts +2 -2
- package/dist/card.d.ts.map +1 -1
- package/dist/card.js +3 -2
- package/dist/card.js.map +1 -1
- package/dist/carousel.d.ts +1 -0
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +1 -0
- package/dist/carousel.js.map +1 -1
- package/dist/catalog.d.ts +151 -31
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +14 -13
- package/dist/catalog.js.map +1 -1
- package/dist/color-picker.d.ts +51 -1
- package/dist/color-picker.d.ts.map +1 -1
- package/dist/color-picker.js +56 -2
- package/dist/color-picker.js.map +1 -1
- package/dist/component-recipes.d.ts +28 -10
- package/dist/component-recipes.d.ts.map +1 -1
- package/dist/component-recipes.js +28 -20
- package/dist/component-recipes.js.map +1 -1
- package/dist/conversation-row.d.ts +1 -1
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +2 -1
- package/dist/conversation-row.js.map +1 -1
- package/dist/data-table.d.ts +12 -0
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +2 -0
- package/dist/data-table.js.map +1 -1
- package/dist/date-range.d.ts +122 -3
- package/dist/date-range.d.ts.map +1 -1
- package/dist/date-range.js +139 -5
- package/dist/date-range.js.map +1 -1
- package/dist/icon.d.ts +2 -1
- package/dist/icon.d.ts.map +1 -1
- package/dist/icon.js +2 -0
- package/dist/icon.js.map +1 -1
- package/dist/recipes.d.ts +1 -0
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +1 -0
- package/dist/recipes.js.map +1 -1
- package/dist/screen-patterns.d.ts +33 -2
- package/dist/screen-patterns.d.ts.map +1 -1
- package/dist/screen-patterns.js +27 -2
- package/dist/screen-patterns.js.map +1 -1
- package/dist/share-sheet.d.ts +115 -0
- package/dist/share-sheet.d.ts.map +1 -0
- package/dist/share-sheet.js +62 -0
- package/dist/share-sheet.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/bottom-navigation.md +16 -0
- package/docs/color-picker.md +24 -19
- package/docs/dialog.md +2 -3
- package/docs/generated/component-maturity.md +12 -12
- package/docs/generated/renderer-evidence.json +71 -19
- package/docs/generated/renderer-evidence.md +15 -14
- package/docs/generated/showcase-manifest.json +35 -21
- package/docs/optional-adapters.md +21 -5
- package/docs/stable-core.md +37 -0
- package/docs/usage/README.md +14 -10
- package/docs/usage/SELECTION.md +109 -0
- package/docs/usage/components/avatar.md +31 -6
- package/docs/usage/components/badge.md +10 -1
- package/docs/usage/components/bottom-navigation.md +16 -0
- package/docs/usage/components/button.md +11 -0
- package/docs/usage/components/card.md +6 -0
- package/docs/usage/components/chat-message.md +9 -1
- package/docs/usage/components/chat-room-members.md +4 -0
- package/docs/usage/components/chat-screen.md +10 -1
- package/docs/usage/components/color-picker.md +65 -28
- package/docs/usage/components/comment-thread-screen.md +16 -1
- package/docs/usage/components/conversation-list-screen.md +81 -0
- package/docs/usage/components/conversation-row.md +5 -1
- package/docs/usage/components/data-table.md +2 -0
- package/docs/usage/components/date-range-picker.md +15 -5
- package/docs/usage/components/dialog.md +3 -3
- package/docs/usage/components/event-attendance-card.md +4 -0
- package/docs/usage/components/follow-list-screen.md +109 -0
- package/docs/usage/components/follow-profile-card.md +4 -0
- package/docs/usage/components/list-row.md +6 -0
- package/docs/usage/components/menu.md +12 -0
- package/docs/usage/components/notice.md +8 -3
- package/docs/usage/components/notification-inbox-screen.md +10 -0
- package/docs/usage/components/notification-row.md +4 -0
- package/docs/usage/components/page-indicator.md +1 -0
- package/docs/usage/components/profile-summary.md +32 -3
- package/docs/usage/components/section.md +2 -2
- package/docs/usage/components/settings-screen.md +1 -1
- package/docs/usage/components/share-sheet.md +139 -0
- package/docs/usage/components/shared-transition-element.md +1 -1
- package/docs/usage/components/sheet.md +1 -0
- package/docs/usage/components/statistic.md +1 -1
- package/docs/usage/compositions/interaction-adapters.md +2 -2
- package/docs/usage/compositions/optional-adapters.md +2 -2
- package/docs/usage/compositions/web-additions.md +5 -5
- package/docs/usage/screens/common-comments.md +1 -0
- package/docs/usage/screens/common-conversation-list.md +22 -1
- package/docs/usage/screens/common-follow-list.md +87 -0
- package/docs/usage/screens/common-settings.md +23 -0
- package/package.json +7 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-sheet.js","sourceRoot":"","sources":["../src/share-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAkE,MAAM,mBAAmB,CAAC;AAmE7H,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,uGAAuG;IACvG,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAgD;IACjG,+FAA+F;IAC/F,OAAO,EAAE,IAAuB;IAChC,SAAS,EAAE,IAAuB;IAClC,8GAA8G;IAC9G,SAAS,EAAE,MAAyB;IACpC,gBAAgB,EAAE,IAAuB;IACzC,YAAY,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE;IAClD,oBAAoB,EAAE,SAA+B;IACrD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9C;;;OAGG;IACH,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,CAAqC,EAAE;CAC/E,CAAC;AAEX,MAAM,UAAU,kBAAkB,CAAC,KAA0E;IAC3G,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IACjF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,GAAG,yBAAyB,CAAC,CAAC;IACzH,CAAC;AACH,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,0BAA0B,CAA6C,KAAsB,EAAE,KAAa;IAC1H,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,4BAA4B,CAAC,KAA+C;IAC1F,IAAI,KAAK,CAAC,MAAM;QAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,SAA4B,EAAE,MAA4B;IACrG,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,EAAE,4BAA4B,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACjH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAA2B,EAAE,IAAyB,EAAE,UAA6B;IAChI,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC","sourcesContent":["import { validateImageChoiceItems, type ImageChoiceItemDescriptor, type ImageChoiceItemLabelLines } from \"./image-choice.js\";\nimport type { sheetRecipe, StackGap } from \"./component-recipes.js\";\nimport type { TextVariant } from \"./foundations.js\";\n\ntype SheetSize = keyof typeof sheetRecipe.sizes;\n\n/**\n * Sharing one link (2026-10-26 user request \"번뚝 공유 그대로 공통화\"): BurnTok's Web and Native share sheets are the\n * reference. One Sheet offers in-app recipients (optional) plus two external actions — copy link and the OS share\n * sheet. The product owns the link, the recipient data and the delivery; HJM owns the layout, selection, in-flight\n * guards and the honest feedback (the OS share sheet only proves it opened, never that anything was delivered).\n */\nexport type ShareSheetRecipientDescriptor = ImageChoiceItemDescriptor;\n\n/** Where the recipient list is: the product fetches it, the sheet shows the matching state. */\nexport type ShareSheetRecipientStatus = \"ready\" | \"loading\" | \"error\";\n\n/**\n * What `onSend` reports back. `sentIds` are the requested ids the product delivered; every other requested id stays\n * selected so the user can retry only those (a partial batch must not resend the delivered ones). `error` is the\n * product's localized reason for the failures; without it the sheet shows `labels.sendFailed`.\n */\nexport type ShareSheetSendResult = Readonly<{ sentIds: readonly string[]; error?: string }>;\n\n/** Payload for the OS share sheet. */\nexport type ShareSheetShareContent = Readonly<{ url: string; title?: string; text?: string }>;\n\n/**\n * How the OS share sheet closed. `completed` means the user picked a target, not that it was delivered; `dismissed`\n * means they backed out (Web `AbortError`, iOS `dismissedAction`). Android always reports `completed`.\n */\nexport type ShareSheetSystemShareOutcome = \"completed\" | \"dismissed\";\n\n/** Localized copy for the sheet chrome and the external actions. The renderer invents none. */\nexport type ShareSheetLabels = Readonly<{\n /** Accessible name of the Sheet close action. */\n close: string;\n copyLink: string;\n systemShare: string;\n /** Announced (polite) after the link reached the clipboard. */\n linkCopied: string;\n /** Shown when copying or opening the OS share sheet failed. */\n actionFailed: string;\n}>;\n\n/** Localized copy for the recipient section. */\nexport type ShareSheetRecipientLabels = Readonly<{\n /** Accessible name of the recipient group (e.g. \"Choose who to send to\"). */\n group: string;\n /** Search field name and placeholder. */\n search: string;\n clearSearch: string;\n loading: string;\n loadFailed: string;\n retry: string;\n /** No recipients at all. */\n empty: string;\n /** Recipients exist but none match the search. */\n noResults: string;\n /** Item description of an already-sent recipient. */\n sent: string;\n /** Send failure without a product reason. */\n sendFailed: string;\n /** Footer action, e.g. `count => \\`Send to ${count}\\``. */\n send: (count: number) => string;\n}>;\n\nexport const shareSheetRecipe = {\n /** The picker scrolls in a tall sheet; external actions alone keep the sheet at its content height. */\n size: { recipients: \"large\", externalOnly: \"auto\" } satisfies Readonly<Record<string, SheetSize>>,\n /** Body regions (notices, search, list) and footer rows (send button above the action row). */\n bodyGap: \"md\" satisfies StackGap,\n footerGap: \"xs\" satisfies StackGap,\n /** Two round external actions centred in one row, each with its caption below (BurnTok 1.28 share footer). */\n actionGap: \"xxxl\" satisfies StackGap,\n actionCaptionGap: \"xs\" satisfies StackGap,\n actionButton: { tone: \"secondary\", size: \"large\" },\n actionCaptionVariant: \"caption\" satisfies TextVariant,\n sendButton: { tone: \"primary\", size: \"large\" },\n /**\n * Recipients are picked by face and name. Two name lines: a 12-character nickname ends near six Hangul glyphs on\n * one 80-wide caption line (BurnTok share recipients, 2026-10-18).\n */\n picker: { showItemLabels: true, itemLabelLines: 2 satisfies ImageChoiceItemLabelLines },\n} as const;\n\nexport function validateShareSheet(input: Readonly<{ title: string; link: string; labels: ShareSheetLabels }>): void {\n if (!input.title.trim()) throw new TypeError(\"ShareSheet title must not be empty\");\n if (!input.link.trim()) throw new TypeError(\"ShareSheet link must not be empty\");\n for (const [key, value] of Object.entries(input.labels)) {\n if (typeof value !== \"string\" || !value.trim()) throw new TypeError(`ShareSheet labels.${key} must be localized text`);\n }\n}\n\n/** Recipients the sheet shows for a search: every item for a blank query, else label matches (locale lower case). */\nexport function filterShareSheetRecipients<Item extends ShareSheetRecipientDescriptor>(items: readonly Item[], query: string): readonly Item[] {\n const needle = query.trim().toLocaleLowerCase();\n if (!needle) return items;\n return items.filter(item => item.label.toLocaleLowerCase().includes(needle));\n}\n\n/** Validates the full recipient list (unique ids, localized labels) the same way the picker does. */\nexport function validateShareSheetRecipients(items: readonly ShareSheetRecipientDescriptor[]): void {\n if (items.length) validateImageChoiceItems(items);\n}\n\n/**\n * Splits one send attempt into delivered and failed ids. A product reporting an id it was not asked to send is a bug\n * (it would mark someone as sent who never was), so it throws instead of being ignored.\n */\nexport function resolveShareSheetSendOutcome(requested: readonly string[], result: ShareSheetSendResult): Readonly<{ sent: readonly string[]; failed: readonly string[] }> {\n const asked = new Set(requested);\n for (const id of result.sentIds) {\n if (!asked.has(id)) throw new TypeError(`ShareSheet onSend reported \"${id}\", which was not requested`);\n }\n const delivered = new Set(result.sentIds);\n return { sent: requested.filter(id => delivered.has(id)), failed: requested.filter(id => !delivered.has(id)) };\n}\n\n/**\n * The picker value: the user's selection plus every already-sent recipient, which stays checked and locked so it\n * cannot be sent twice.\n */\nexport function resolveShareSheetPickerValue(selected: readonly string[], sent: ReadonlySet<string>, visibleIds: readonly string[]): string[] {\n return [...selected.filter(id => !sent.has(id)), ...visibleIds.filter(id => sent.has(id))];\n}\n"]}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAiB,CAAC","sourcesContent":["/** Package release shown by documentation surfaces. Kept in sync by a test. */\nexport const designSystemVersion = \"1.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAiB,CAAC","sourcesContent":["/** Package release shown by documentation surfaces. Kept in sync by a test. */\nexport const designSystemVersion = \"1.48.0\" as const;\n"]}
|
|
@@ -208,3 +208,19 @@ Utilverse는 1.31.0 채택 뒤에도 셸마다 다른 막대 틀(둥근 독·알
|
|
|
208
208
|
라벨 외의 비색상 선택 근거가 된다. 배지와 `prominent` 원은 흐리지 않는다.
|
|
209
209
|
- 막대 바탕색은 기존 팔레트 역할(canvas)이고 테마별 색은 `brandPalette`로 바꾼다. 높이는 `density`와 `iconSize`가 정한다.
|
|
210
210
|
같은 의미의 값을 새 축으로 중복하지 않았다.
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
## 타일 바탕과 선택 강조 분리 (2026-10-25)
|
|
214
|
+
|
|
215
|
+
오늘야구에서 선택된 파란 타일은 유지하면서 바탕을 흰색으로 사용하려는 요청으로
|
|
216
|
+
`configuration.tone: "brand" | "neutral"`을 추가했다. 기본 `brand`는 기존 surfaceAccent 바탕을 유지한다.
|
|
217
|
+
`neutral`은 `semanticColors.surface.default`(테마의 surface)를 사용한다. 라이트 기본 테마에서는 흰색,
|
|
218
|
+
다크에서는 어두운 공통 표면이며 선택 타일의 primary/onPrimary와 모양·간격·동작은 유지한다.
|
|
219
|
+
flat tile 전용이며 raised 표면과 함께 지정하면 오류다. 앱에서 팔레트나 style을 덮어쓰지 않는다.
|
|
220
|
+
|
|
221
|
+
```tsx
|
|
222
|
+
configuration={{ presentation: "floating", selection: "tile", tone: "neutral" }}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Web·Native의 `NeutralTiles`와 `NeutralTilesDark` Storybook 예제가 같은 공개 API를 사용한다.
|
|
226
|
+
로컬 개발 API이며 게시된 패키지 지원은 해당 릴리스에 포함된 뒤 확인한다.
|
package/docs/color-picker.md
CHANGED
|
@@ -1,30 +1,35 @@
|
|
|
1
|
-
# ColorPicker —
|
|
1
|
+
# ColorPicker — sRGB 색상 입력
|
|
2
2
|
|
|
3
|
-
2026-09-30: 사용자가 남은 세 후보의 개발을 명시적으로 요청하여 기존 수요 대기 결정을 대체했다.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
2026-09-30: 사용자가 남은 세 후보의 개발을 명시적으로 요청하여 기존 수요 대기 결정을 대체했다. 처음에는 Web만 포함했다.
|
|
4
|
+
2026-10-25: Diairy 손그림 프로필 요청으로 Native 개발 후보를 추가했고, 같은 날 사용자 요청("다른 곳 인사이트를 얻으며 개편")으로
|
|
5
|
+
브라우저 색 팝업(Web)·RGB 막대(Native)를 HSV 편집기로 바꿨다. 저장값은 그대로 HEX sRGB다. HSV는 편집할 때만 쓰는 좌표다.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
`ColorPicker`는 controlled `value`와 `onValueChange`를 받는다. `label`과 `labels.hex`·`hue`·`saturation`·`brightness`·`opacity`·`invalid`
|
|
8
|
+
(프리셋이 있으면 `presets`)는 제품에서 번역하여 전달한다. `alpha`가 false면 `#rrggbb`, true면 `#rrggbbaa`를 내보낸다.
|
|
9
|
+
3·4자리 축약 HEX도 입력할 수 있다. alpha가 켜진 상태에서 3·6자리 HEX를 입력하면 색만 바꾸고 현재 투명도를 유지한다.
|
|
10
10
|
alpha를 끈 상태에서 불투명하지 않은 값을 전달하면 투명도를 조용히 버리지 않고 거부한다.
|
|
11
11
|
|
|
12
|
-
-
|
|
12
|
+
- 채도·밝기 영역: 가로가 채도, 세로가 밝기다. 누른 자리로 바로 이동하고 끄는 동안 연속으로 바뀐다. 상위 스크롤에 터치를 넘기지 않는다.
|
|
13
|
+
Web은 영역 안의 두 range(채도·밝기)로 키보드·보조기술을 지원한다. Native는 adjustable 하나로 밝기 증감, 사용자 정의 행동으로 채도 증감을 준다.
|
|
14
|
+
- 색조 막대 0–360°, 불투명도 막대 0–100%. Web은 range, Native는 HJM Slider의 제스처·접근성 로직을 내부 색 트랙으로 재사용한다.
|
|
15
|
+
- 검정·회색에서 사라지는 색조·채도는 직전 값을 유지한다(`pickerHsv(value, previous)`). HEX ↔ HSV는 모든 HEX가 원래 값으로 돌아온다(계약 테스트).
|
|
16
|
+
- HEX는 Enter/blur(Native submit/blur)에 확정한다. 잘못된 입력은 오류를 보여주고 외부 값은 유지한다.
|
|
13
17
|
Escape는 마지막 controlled 값으로 복구하며 Enter가 상위 폼을 제출하지 않게 한다.
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
- 제어부는 HJM canvas·border·focus 토큰을 사용한다. 견본의 사용자 색상은 콘텐츠 데이터다.
|
|
19
|
-
선택색을 제품의 본문/배경으로 사용할 때의 대비는 제품이 확인한다.
|
|
18
|
+
- `presets`는 `ColorSwatchPicker`(라디오 의미의 둥근 견본)로 그린다. 중복값은 정규화 후 제거한다.
|
|
19
|
+
- `disabled`는 모든 입력과 견본을 비활성화한다.
|
|
20
|
+
- 제어부는 HJM canvas·border·focus 토큰을 사용한다. 손잡이의 흰 테두리·그림자와 투명 체크 무늬는 어떤 색 위에서도 보이게 하는 고정값이다.
|
|
21
|
+
견본의 사용자 색상은 콘텐츠 데이터다. 선택색을 제품의 본문/배경으로 사용할 때의 대비는 제품이 확인한다.
|
|
20
22
|
|
|
21
23
|
```tsx
|
|
22
24
|
<ColorPicker label={t('color.title')} labels={{
|
|
23
|
-
|
|
25
|
+
hex: 'HEX', hue: t('color.hue'), saturation: t('color.saturation'), brightness: t('color.brightness'),
|
|
26
|
+
opacity: t('color.opacity'), invalid: t('color.invalid'), presets: t('color.presets'),
|
|
24
27
|
}} value={color} onValueChange={setColor} alpha presets={['#b94627ff', '#338844ff']} />
|
|
25
28
|
```
|
|
26
29
|
|
|
27
|
-
계약: [color-picker.ts](../src/color-picker.ts). UI: [
|
|
28
|
-
사용
|
|
29
|
-
|
|
30
|
-
[
|
|
30
|
+
계약: [color-picker.ts](../src/color-picker.ts). UI: [Web](../../react/src/color-picker.tsx), [Native](../../react-native/src/color-picker.tsx).
|
|
31
|
+
사용 지침: [usage/components/color-picker.md](usage/components/color-picker.md).
|
|
32
|
+
사용 예제: [Web additions](../../../showcase/web/src/patterns/WebAdditions.stories.tsx), [Native](../../../showcase/native/src/ColorPicker.stories.tsx).
|
|
33
|
+
검증: [계약 회귀](../test/web-additions.test.ts), [Web 동작](../../react/test/web-additions.browser.test.tsx),
|
|
34
|
+
[Native 동작](../../react-native/test/color-picker.test.tsx), [환경 행렬](../../react/test/scenario-matrix.browser.test.tsx).
|
|
35
|
+
Native는 `react-native-svg`가 필요하며 패키지 게시·기기 검증은 별도다.
|
package/docs/dialog.md
CHANGED
|
@@ -46,7 +46,7 @@ Native accessibility follow-up (2026-10-01): at 200% text scale, the close glyph
|
|
|
46
46
|
|
|
47
47
|
Native viewport candidate (BT-QA-027, 2026-10-05): BurnTok local QA exposed a long confirmation extending beyond the visible screen. Dialog and AlertDialog now constrain the content surface and provide a shrinking scroll body, with actions outside that body and provider safe-area padding. Host tests cover those structural contracts and cancellation; they cannot prove Yoga geometry. Ordinary-size iOS confirmation and cancellation were checked. Enlarged-text device verification remains pending: the user stopped that QA scope before the candidate was confirmed, so this is not a completed device fix. Font caps and clipped copy were rejected because they remove readable content.
|
|
48
48
|
|
|
49
|
-
## Optional measured origin motion (published API,
|
|
49
|
+
## Optional measured origin motion (published API, stable presentation contract)
|
|
50
50
|
|
|
51
51
|
2026-10-07 Aceternity card/grid comparison exposed a stale publication label here.
|
|
52
52
|
Both npm 1.14.0 renderer tarballs include `DialogProps.motionOrigin` in `dist/overlays.d.ts`,
|
|
@@ -61,8 +61,7 @@ the modal engine. It does not implement shared image/text identities or a new Po
|
|
|
61
61
|
Web retains one subtree through exit and suppresses stale animation completion when reopened.
|
|
62
62
|
Native uses the actual modal measurement and bounds its optional measurement wait by the existing
|
|
63
63
|
enter duration, falling back to ordinary presentation if the host fails to reply. Reduced motion skips
|
|
64
|
-
spatial interpolation.
|
|
65
|
-
experimental until the QA report verifies them. See the usage guide and
|
|
64
|
+
spatial interpolation. The optional presentation contract is stable as of 2026-10-26: browser/host regressions and the current iOS failed-save → close → reopen → successful-save flow passed. Per-device geometry/performance and consuming-product certification remain scoped QA; stable does not promise a frame-rate target on every device. See the usage guide and
|
|
66
65
|
[origin transition QA](../../../docs/qa/2026-10-07-overlay-origin-transition.md).
|
|
67
66
|
|
|
68
67
|
## Decorative layer and immersive presentation (1.31.0)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Component maturity and evidence manifest
|
|
2
2
|
|
|
3
|
-
> Generated from `@hjmds/design-contracts` 1.
|
|
3
|
+
> Generated from `@hjmds/design-contracts` 1.48.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
|
|
8
|
-
- Web renderer: stable
|
|
9
|
-
- Native renderer: stable
|
|
7
|
+
- Contract: stable 131
|
|
8
|
+
- Web renderer: stable 131
|
|
9
|
+
- Native renderer: stable 114 · unsupported 17
|
|
10
10
|
|
|
11
11
|
| Component | Canonical story ID | Contract | Web | Native | Documentation | Required evidence |
|
|
12
12
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
@@ -43,7 +43,7 @@ This document is the human-readable projection of the same catalog and Showcase
|
|
|
43
43
|
| RadioGroup | `input/radio-group` | 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, native-actions |
|
|
44
44
|
| Switch | `input/switch` | 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, native-actions |
|
|
45
45
|
| Chip | `input/chip` | 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, native-actions |
|
|
46
|
-
| ImageChoiceGroup | `input/image-choice-group` |
|
|
46
|
+
| ImageChoiceGroup | `input/image-choice-group` | stable | stable | stable | generated only | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility; native: default, dark, large-text, rtl, reduced-motion, accessibility |
|
|
47
47
|
| SegmentedControl | `input/segmented-control` | 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, native-actions |
|
|
48
48
|
| ToggleGroup | `input/toggle-group` | stable | stable | stable | [authored](../toggle-group.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 |
|
|
49
49
|
| TagsInput | `input/tags-input` | stable | stable | stable | [authored](../tags-input.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 |
|
|
@@ -54,7 +54,7 @@ This document is the human-readable projection of the same catalog and Showcase
|
|
|
54
54
|
| TimePicker | `input/time-picker` | stable | stable | stable | [authored](../time-picker.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 |
|
|
55
55
|
| DatePicker | `input/date-picker` | stable | stable | stable | [authored](../date-picker.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 |
|
|
56
56
|
| DateRangePicker | `input/date-range-picker` | stable | stable | stable | generated only | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, large-text, rtl, reduced-motion, accessibility, native-actions |
|
|
57
|
-
| ColorPicker | `input/color-picker` | stable | stable |
|
|
57
|
+
| ColorPicker | `input/color-picker` | stable | stable | stable | [authored](../color-picker.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 |
|
|
58
58
|
| FilePicker | `input/file-picker` | stable | stable | stable | [authored](../file-picker.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 |
|
|
59
59
|
| Form | `input/form` | stable | stable | stable | [authored](../form.md) | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, large-text, rtl, reduced-motion, accessibility, native-actions |
|
|
60
60
|
| Agreement | `input/agreement` | stable | stable | stable | [authored](../agreement.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 |
|
|
@@ -66,8 +66,8 @@ This document is the human-readable projection of the same catalog and Showcase
|
|
|
66
66
|
| Sidebar | `navigation/sidebar` | stable | stable | unsupported | [authored](../sidebar.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
67
67
|
| 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 |
|
|
68
68
|
| Breadcrumb | `navigation/breadcrumb` | stable | stable | unsupported | [authored](../breadcrumb.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
69
|
-
| PageIndicator | `navigation/page-indicator` |
|
|
70
|
-
| Pagination | `navigation/pagination` | stable | stable |
|
|
69
|
+
| PageIndicator | `navigation/page-indicator` | stable | stable | stable | generated only | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility; native: default, dark, large-text, rtl, reduced-motion, accessibility |
|
|
70
|
+
| Pagination | `navigation/pagination` | stable | stable | stable | [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 |
|
|
71
71
|
| 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 |
|
|
72
72
|
| 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 |
|
|
73
73
|
| Menubar | `navigation/menubar` | stable | stable | unsupported | [authored](../menubar.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
@@ -86,8 +86,8 @@ This document is the human-readable projection of the same catalog and Showcase
|
|
|
86
86
|
| Accordion | `data-display/accordion` | 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, native-actions |
|
|
87
87
|
| Statistic | `data-display/statistic` | stable | stable | stable | [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 |
|
|
88
88
|
| Timeline | `data-display/timeline` | stable | stable | stable | [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 |
|
|
89
|
-
| DataTable | `data-display/data-table` | stable | stable |
|
|
90
|
-
| Chart | `data-display/chart` |
|
|
89
|
+
| DataTable | `data-display/data-table` | stable | stable | stable | [authored](../data-table.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 |
|
|
90
|
+
| Chart | `data-display/chart` | stable | stable | stable | [authored](../chart.md) | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility, keyboard; native: default, dark, large-text, rtl, reduced-motion, accessibility, native-actions |
|
|
91
91
|
| Tree | `data-display/tree` | stable | stable | unsupported | [authored](../tree.md) | contract: contract; web: default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard |
|
|
92
92
|
| Calendar | `data-display/calendar` | stable | stable | stable | [authored](../calendar.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 |
|
|
93
93
|
| Carousel | `data-display/carousel` | stable | stable | stable | [authored](../carousel.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 |
|
|
@@ -132,8 +132,8 @@ This document is the human-readable projection of the same catalog and Showcase
|
|
|
132
132
|
| 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 |
|
|
133
133
|
| 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 |
|
|
134
134
|
| 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 |
|
|
135
|
-
| TypingIndicator | `feedback/typing-indicator` |
|
|
136
|
-
| ChatDateSeparator | `data-display/chat-date-separator` |
|
|
135
|
+
| TypingIndicator | `feedback/typing-indicator` | stable | stable | stable | generated only | contract: contract; web: default, dark, large-text, rtl, reduced-motion, accessibility; native: default, dark, large-text, rtl, reduced-motion, accessibility |
|
|
136
|
+
| ChatDateSeparator | `data-display/chat-date-separator` | 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 |
|
|
137
137
|
| 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 |
|
|
138
138
|
| 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 |
|
|
139
139
|
| 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,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"designSystemVersion": "1.
|
|
3
|
+
"designSystemVersion": "1.48.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.
|
|
8
|
+
"packageVersion": "1.48.0",
|
|
9
9
|
"activeComponents": 131,
|
|
10
10
|
"claimedComponents": 131,
|
|
11
11
|
"completeScenarioComponents": 130,
|
|
@@ -1785,7 +1785,7 @@
|
|
|
1785
1785
|
{
|
|
1786
1786
|
"componentId": "image-choice-group",
|
|
1787
1787
|
"name": "ImageChoiceGroup",
|
|
1788
|
-
"status": "
|
|
1788
|
+
"status": "stable",
|
|
1789
1789
|
"claimed": true,
|
|
1790
1790
|
"subpath": "./image-choice",
|
|
1791
1791
|
"exportNames": [
|
|
@@ -2424,7 +2424,8 @@
|
|
|
2424
2424
|
"claimed": true,
|
|
2425
2425
|
"subpath": "./color-picker",
|
|
2426
2426
|
"exportNames": [
|
|
2427
|
-
"ColorPicker"
|
|
2427
|
+
"ColorPicker",
|
|
2428
|
+
"ColorSwatchPicker"
|
|
2428
2429
|
],
|
|
2429
2430
|
"proofs": [
|
|
2430
2431
|
{
|
|
@@ -3118,7 +3119,7 @@
|
|
|
3118
3119
|
{
|
|
3119
3120
|
"componentId": "page-indicator",
|
|
3120
3121
|
"name": "PageIndicator",
|
|
3121
|
-
"status": "
|
|
3122
|
+
"status": "stable",
|
|
3122
3123
|
"claimed": true,
|
|
3123
3124
|
"subpath": "./carousel",
|
|
3124
3125
|
"exportNames": [
|
|
@@ -4243,7 +4244,7 @@
|
|
|
4243
4244
|
{
|
|
4244
4245
|
"componentId": "chart",
|
|
4245
4246
|
"name": "Chart",
|
|
4246
|
-
"status": "
|
|
4247
|
+
"status": "stable",
|
|
4247
4248
|
"claimed": true,
|
|
4248
4249
|
"subpath": "./chart",
|
|
4249
4250
|
"exportNames": [
|
|
@@ -6615,7 +6616,7 @@
|
|
|
6615
6616
|
{
|
|
6616
6617
|
"componentId": "typing-indicator",
|
|
6617
6618
|
"name": "TypingIndicator",
|
|
6618
|
-
"status": "
|
|
6619
|
+
"status": "stable",
|
|
6619
6620
|
"claimed": true,
|
|
6620
6621
|
"subpath": "./screens",
|
|
6621
6622
|
"exportNames": [
|
|
@@ -6662,7 +6663,7 @@
|
|
|
6662
6663
|
{
|
|
6663
6664
|
"componentId": "chat-date-separator",
|
|
6664
6665
|
"name": "ChatDateSeparator",
|
|
6665
|
-
"status": "
|
|
6666
|
+
"status": "stable",
|
|
6666
6667
|
"claimed": true,
|
|
6667
6668
|
"subpath": "./screens",
|
|
6668
6669
|
"exportNames": [
|
|
@@ -7063,10 +7064,10 @@
|
|
|
7063
7064
|
},
|
|
7064
7065
|
"native": {
|
|
7065
7066
|
"packageName": "@hjmds/react-native",
|
|
7066
|
-
"packageVersion": "1.
|
|
7067
|
-
"activeComponents":
|
|
7068
|
-
"claimedComponents":
|
|
7069
|
-
"completeScenarioComponents":
|
|
7067
|
+
"packageVersion": "1.48.0",
|
|
7068
|
+
"activeComponents": 114,
|
|
7069
|
+
"claimedComponents": 114,
|
|
7070
|
+
"completeScenarioComponents": 111,
|
|
7070
7071
|
"components": [
|
|
7071
7072
|
{
|
|
7072
7073
|
"componentId": "text",
|
|
@@ -8723,7 +8724,7 @@
|
|
|
8723
8724
|
{
|
|
8724
8725
|
"componentId": "image-choice-group",
|
|
8725
8726
|
"name": "ImageChoiceGroup",
|
|
8726
|
-
"status": "
|
|
8727
|
+
"status": "stable",
|
|
8727
8728
|
"claimed": true,
|
|
8728
8729
|
"subpath": "./image-choice",
|
|
8729
8730
|
"exportNames": [
|
|
@@ -9354,6 +9355,57 @@
|
|
|
9354
9355
|
],
|
|
9355
9356
|
"missingScenarios": []
|
|
9356
9357
|
},
|
|
9358
|
+
{
|
|
9359
|
+
"componentId": "color-picker",
|
|
9360
|
+
"name": "ColorPicker",
|
|
9361
|
+
"status": "stable",
|
|
9362
|
+
"claimed": true,
|
|
9363
|
+
"subpath": "./color-picker",
|
|
9364
|
+
"exportNames": [
|
|
9365
|
+
"ColorPicker",
|
|
9366
|
+
"ColorSwatchPicker"
|
|
9367
|
+
],
|
|
9368
|
+
"proofs": [
|
|
9369
|
+
{
|
|
9370
|
+
"scenarios": [
|
|
9371
|
+
"default"
|
|
9372
|
+
],
|
|
9373
|
+
"file": "test/default-render.test.tsx",
|
|
9374
|
+
"caseId": "color-picker"
|
|
9375
|
+
},
|
|
9376
|
+
{
|
|
9377
|
+
"scenarios": [
|
|
9378
|
+
"dark",
|
|
9379
|
+
"long-copy",
|
|
9380
|
+
"large-text",
|
|
9381
|
+
"rtl",
|
|
9382
|
+
"reduced-motion",
|
|
9383
|
+
"accessibility"
|
|
9384
|
+
],
|
|
9385
|
+
"file": "test/scenario-matrix.test.tsx",
|
|
9386
|
+
"caseId": "color-picker"
|
|
9387
|
+
}
|
|
9388
|
+
],
|
|
9389
|
+
"requiredScenarios": [
|
|
9390
|
+
"default",
|
|
9391
|
+
"dark",
|
|
9392
|
+
"long-copy",
|
|
9393
|
+
"large-text",
|
|
9394
|
+
"rtl",
|
|
9395
|
+
"reduced-motion",
|
|
9396
|
+
"accessibility"
|
|
9397
|
+
],
|
|
9398
|
+
"claimedScenarios": [
|
|
9399
|
+
"default",
|
|
9400
|
+
"dark",
|
|
9401
|
+
"long-copy",
|
|
9402
|
+
"large-text",
|
|
9403
|
+
"rtl",
|
|
9404
|
+
"reduced-motion",
|
|
9405
|
+
"accessibility"
|
|
9406
|
+
],
|
|
9407
|
+
"missingScenarios": []
|
|
9408
|
+
},
|
|
9357
9409
|
{
|
|
9358
9410
|
"componentId": "file-picker",
|
|
9359
9411
|
"name": "FilePicker",
|
|
@@ -9879,7 +9931,7 @@
|
|
|
9879
9931
|
{
|
|
9880
9932
|
"componentId": "page-indicator",
|
|
9881
9933
|
"name": "PageIndicator",
|
|
9882
|
-
"status": "
|
|
9934
|
+
"status": "stable",
|
|
9883
9935
|
"claimed": true,
|
|
9884
9936
|
"subpath": "./carousel",
|
|
9885
9937
|
"exportNames": [
|
|
@@ -9926,7 +9978,7 @@
|
|
|
9926
9978
|
{
|
|
9927
9979
|
"componentId": "pagination",
|
|
9928
9980
|
"name": "Pagination",
|
|
9929
|
-
"status": "
|
|
9981
|
+
"status": "stable",
|
|
9930
9982
|
"claimed": true,
|
|
9931
9983
|
"subpath": "./pagination",
|
|
9932
9984
|
"exportNames": [
|
|
@@ -10758,7 +10810,7 @@
|
|
|
10758
10810
|
{
|
|
10759
10811
|
"componentId": "data-table",
|
|
10760
10812
|
"name": "DataTable",
|
|
10761
|
-
"status": "
|
|
10813
|
+
"status": "stable",
|
|
10762
10814
|
"claimed": true,
|
|
10763
10815
|
"subpath": "./data-table",
|
|
10764
10816
|
"exportNames": [
|
|
@@ -10814,7 +10866,7 @@
|
|
|
10814
10866
|
{
|
|
10815
10867
|
"componentId": "chart",
|
|
10816
10868
|
"name": "Chart",
|
|
10817
|
-
"status": "
|
|
10869
|
+
"status": "stable",
|
|
10818
10870
|
"claimed": true,
|
|
10819
10871
|
"subpath": "./chart",
|
|
10820
10872
|
"exportNames": [
|
|
@@ -12621,7 +12673,7 @@
|
|
|
12621
12673
|
{
|
|
12622
12674
|
"componentId": "typing-indicator",
|
|
12623
12675
|
"name": "TypingIndicator",
|
|
12624
|
-
"status": "
|
|
12676
|
+
"status": "stable",
|
|
12625
12677
|
"claimed": true,
|
|
12626
12678
|
"subpath": "./screens",
|
|
12627
12679
|
"exportNames": [
|
|
@@ -12668,7 +12720,7 @@
|
|
|
12668
12720
|
{
|
|
12669
12721
|
"componentId": "chat-date-separator",
|
|
12670
12722
|
"name": "ChatDateSeparator",
|
|
12671
|
-
"status": "
|
|
12723
|
+
"status": "stable",
|
|
12672
12724
|
"claimed": true,
|
|
12673
12725
|
"subpath": "./screens",
|
|
12674
12726
|
"exportNames": [
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Renderer evidence coverage
|
|
2
2
|
|
|
3
|
-
> Generated for HJM 1.
|
|
3
|
+
> Generated for HJM 1.48.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
7
|
- web: 131/131 active implementations; 130/131 required scenario sets
|
|
8
|
-
- native:
|
|
8
|
+
- native: 114/114 active implementations; 111/114 required scenario sets
|
|
9
9
|
|
|
10
10
|
| Component | Surface | Maturity | Renderer package | Export | Claimed scenarios | Missing required scenarios | Executable proofs |
|
|
11
11
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
@@ -42,7 +42,7 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
42
42
|
| RadioGroup | web | stable | @hjmds/react | ./selection | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#radio-group, test/scenario-matrix.browser.test.tsx#radio-group, test/stable-core.browser.test.tsx#radio-group |
|
|
43
43
|
| Switch | web | stable | @hjmds/react | ./selection | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#switch, test/scenario-matrix.browser.test.tsx#switch, test/stable-core.browser.test.tsx#switch |
|
|
44
44
|
| Chip | web | stable | @hjmds/react | ./selection | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#chip, test/scenario-matrix.browser.test.tsx#chip, test/stable-core.browser.test.tsx#chip |
|
|
45
|
-
| ImageChoiceGroup | web |
|
|
45
|
+
| ImageChoiceGroup | web | stable | @hjmds/react | ./image-choice | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#image-choice-group, test/scenario-matrix.browser.test.tsx#image-choice-group |
|
|
46
46
|
| SegmentedControl | web | stable | @hjmds/react | ./selection | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#segmented-control, test/scenario-matrix.browser.test.tsx#segmented-control, test/stable-core.browser.test.tsx#segmented-control |
|
|
47
47
|
| ToggleGroup | web | stable | @hjmds/react | ./toggle-group | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#toggle-group, test/scenario-matrix.browser.test.tsx#toggle-group, test/stable-core.browser.test.tsx#toggle-group |
|
|
48
48
|
| TagsInput | web | stable | @hjmds/react | ./tags-input | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#tags-input, test/scenario-matrix.browser.test.tsx#tags-input, test/stable-core.browser.test.tsx#tags-input |
|
|
@@ -65,7 +65,7 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
65
65
|
| 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 |
|
|
66
66
|
| 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 |
|
|
67
67
|
| 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 |
|
|
68
|
-
| PageIndicator | web |
|
|
68
|
+
| PageIndicator | web | stable | @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 |
|
|
69
69
|
| 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 |
|
|
70
70
|
| 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 |
|
|
71
71
|
| 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 |
|
|
@@ -86,7 +86,7 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
86
86
|
| Statistic | web | stable | @hjmds/react | ./display | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#statistic, test/scenario-matrix.browser.test.tsx#statistic |
|
|
87
87
|
| Timeline | web | stable | @hjmds/react | ./display | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#timeline, test/scenario-matrix.browser.test.tsx#timeline |
|
|
88
88
|
| DataTable | web | stable | @hjmds/react | ./data-table | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#data-table, test/scenario-matrix.browser.test.tsx#data-table, test/data-table.keyboard.browser.test.tsx#data-table |
|
|
89
|
-
| Chart | web |
|
|
89
|
+
| Chart | web | stable | @hjmds/react | ./chart | default, dark, large-text, rtl, reduced-motion, accessibility | keyboard | test/default-render.ssr.test.tsx#chart, test/scenario-matrix.browser.test.tsx#chart |
|
|
90
90
|
| Tree | web | stable | @hjmds/react | ./tree | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#tree, test/scenario-matrix.browser.test.tsx#tree, test/tree.browser.test.tsx#tree |
|
|
91
91
|
| Calendar | web | stable | @hjmds/react | ./calendar | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#calendar, test/scenario-matrix.browser.test.tsx#calendar, test/calendar.browser.test.tsx#calendar |
|
|
92
92
|
| Carousel | web | stable | @hjmds/react | ./carousel | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#carousel, test/scenario-matrix.browser.test.tsx#carousel, test/carousel.browser.test.tsx#carousel |
|
|
@@ -131,8 +131,8 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
131
131
|
| 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 |
|
|
132
132
|
| 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 |
|
|
133
133
|
| 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 |
|
|
134
|
-
| TypingIndicator | web |
|
|
135
|
-
| ChatDateSeparator | web |
|
|
134
|
+
| TypingIndicator | web | stable | @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 |
|
|
135
|
+
| ChatDateSeparator | web | stable | @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 |
|
|
136
136
|
| 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 |
|
|
137
137
|
| 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 |
|
|
138
138
|
| 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 |
|
|
@@ -171,7 +171,7 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
171
171
|
| RadioGroup | native | stable | @hjmds/react-native | ./inputs | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#radio-group, test/scenario-matrix.test.tsx#radio-group, test/stable-core.test.tsx#radio-group |
|
|
172
172
|
| Switch | native | stable | @hjmds/react-native | ./inputs | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#switch, test/scenario-matrix.test.tsx#switch, test/stable-core.test.tsx#switch |
|
|
173
173
|
| Chip | native | stable | @hjmds/react-native | ./inputs | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#chip, test/scenario-matrix.test.tsx#chip, test/stable-core.test.tsx#chip |
|
|
174
|
-
| ImageChoiceGroup | native |
|
|
174
|
+
| ImageChoiceGroup | native | stable | @hjmds/react-native | ./image-choice | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#image-choice-group, test/scenario-matrix.test.tsx#image-choice-group |
|
|
175
175
|
| SegmentedControl | native | stable | @hjmds/react-native | ./inputs | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#segmented-control, test/scenario-matrix.test.tsx#segmented-control, test/stable-core.test.tsx#segmented-control |
|
|
176
176
|
| ToggleGroup | native | stable | @hjmds/react-native | ./toggle-group | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#toggle-group, test/scenario-matrix.test.tsx#toggle-group, test/stable-core.test.tsx#toggle-group |
|
|
177
177
|
| TagsInput | native | stable | @hjmds/react-native | ./tags-input | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#tags-input, test/scenario-matrix.test.tsx#tags-input, test/stable-core.test.tsx#tags-input |
|
|
@@ -182,6 +182,7 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
182
182
|
| TimePicker | native | stable | @hjmds/react-native | ./time-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#time-picker, test/scenario-matrix.test.tsx#time-picker, test/time-picker.test.tsx#time-picker |
|
|
183
183
|
| DatePicker | native | stable | @hjmds/react-native | ./date-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#date-picker, test/scenario-matrix.test.tsx#date-picker, test/stable-core.test.tsx#date-picker |
|
|
184
184
|
| DateRangePicker | native | stable | @hjmds/react-native | ./date-range | default, dark, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#date-range-picker, test/scenario-matrix.test.tsx#date-range-picker, test/date-range-actions.test.tsx#date-range-picker |
|
|
185
|
+
| ColorPicker | native | stable | @hjmds/react-native | ./color-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#color-picker, test/scenario-matrix.test.tsx#color-picker |
|
|
185
186
|
| FilePicker | native | stable | @hjmds/react-native | ./file-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#file-picker, test/scenario-matrix.test.tsx#file-picker, test/file-picker-host-action.test.tsx#file-picker |
|
|
186
187
|
| Form | native | stable | @hjmds/react-native | ./forms | default, dark, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#form, test/scenario-matrix.test.tsx#form, test/form.interaction.test.tsx#form |
|
|
187
188
|
| Agreement | native | stable | @hjmds/react-native | ./agreement | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#agreement, test/scenario-matrix.test.tsx#agreement, test/agreement.interaction.test.tsx#agreement |
|
|
@@ -191,8 +192,8 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
191
192
|
| 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 |
|
|
192
193
|
| 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 |
|
|
193
194
|
| 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 |
|
|
194
|
-
| PageIndicator | native |
|
|
195
|
-
| Pagination | native |
|
|
195
|
+
| PageIndicator | native | stable | @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 |
|
|
196
|
+
| Pagination | native | stable | @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 |
|
|
196
197
|
| 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 |
|
|
197
198
|
| 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 |
|
|
198
199
|
| Menu | native | stable | @hjmds/react-native | ./top-bar | default, dark, large-text, rtl, reduced-motion, accessibility, native-actions, long-copy | none | test/default-render.test.tsx#menu, test/scenario-matrix.test.tsx#menu, test/menu-actions.test.tsx#menu |
|
|
@@ -208,8 +209,8 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
208
209
|
| Accordion | native | stable | @hjmds/react-native | ./data-display | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#accordion, test/scenario-matrix.test.tsx#accordion, test/accordion-actions.test.tsx#accordion |
|
|
209
210
|
| Statistic | native | stable | @hjmds/react-native | ./data-display | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#statistic, test/scenario-matrix.test.tsx#statistic |
|
|
210
211
|
| Timeline | native | stable | @hjmds/react-native | ./data-display | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#timeline, test/scenario-matrix.test.tsx#timeline |
|
|
211
|
-
| DataTable | native |
|
|
212
|
-
| Chart | native |
|
|
212
|
+
| DataTable | native | stable | @hjmds/react-native | ./data-table | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | native-actions | test/default-render.test.tsx#data-table, test/scenario-matrix.test.tsx#data-table |
|
|
213
|
+
| Chart | native | stable | @hjmds/react-native | ./chart | default, dark, large-text, rtl, reduced-motion, accessibility | native-actions | test/default-render.test.tsx#chart, test/scenario-matrix.test.tsx#chart |
|
|
213
214
|
| Calendar | native | stable | @hjmds/react-native | ./calendar | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#calendar, test/scenario-matrix.test.tsx#calendar, test/calendar.test.tsx#calendar |
|
|
214
215
|
| Carousel | native | stable | @hjmds/react-native | ./carousel | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, native-actions | none | test/default-render.test.tsx#carousel, test/scenario-matrix.test.tsx#carousel, test/carousel.test.tsx#carousel |
|
|
215
216
|
| DescriptionList | native | stable | @hjmds/react-native | ./data-display | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#description-list, test/scenario-matrix.test.tsx#description-list |
|
|
@@ -244,8 +245,8 @@ This projection joins the canonical surface maturity manifest with first-party r
|
|
|
244
245
|
| 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 |
|
|
245
246
|
| 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 |
|
|
246
247
|
| 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 |
|
|
247
|
-
| TypingIndicator | native |
|
|
248
|
-
| ChatDateSeparator | native |
|
|
248
|
+
| TypingIndicator | native | stable | @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 |
|
|
249
|
+
| ChatDateSeparator | native | stable | @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 |
|
|
249
250
|
| 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 |
|
|
250
251
|
| 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 |
|
|
251
252
|
| 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 |
|