@hjmds/design-contracts 1.21.0 → 1.23.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/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/authoring-tools.md +1 -1
- package/docs/collection-editing.md +3 -3
- package/docs/communication.md +1 -1
- package/docs/data-workflows.md +2 -2
- package/docs/generated/component-maturity.md +1 -1
- package/docs/generated/renderer-evidence.json +3 -3
- package/docs/generated/renderer-evidence.md +1 -1
- package/docs/generated/showcase-manifest.json +1 -1
- package/docs/media-transport.md +1 -1
- package/docs/screen-patterns.md +11 -4
- package/docs/social-compositions.md +1 -1
- package/docs/streaming-answer.md +1 -1
- package/docs/task-controls.md +1 -1
- package/docs/toggle-feedback.md +1 -1
- package/docs/transfer-task.md +1 -1
- package/docs/usage/README.md +13 -12
- package/docs/usage/SELECTION.md +36 -23
- package/docs/usage/STANDARD.md +5 -0
- package/docs/usage/components/button.md +1 -1
- package/docs/usage/components/chart.md +1 -1
- package/docs/usage/components/comment-thread-screen.md +4 -1
- package/docs/usage/components/composition-layout.md +92 -0
- package/docs/usage/components/data-table.md +4 -0
- package/docs/usage/components/screen-layout.md +1 -0
- package/docs/usage/components/search-screen.md +1 -0
- package/docs/usage/components/tabs.md +1 -1
- package/docs/usage/compositions/action-feedback.md +5 -3
- package/docs/usage/compositions/action-recovery-optimistic.md +4 -2
- package/docs/usage/compositions/action-recovery-save.md +4 -2
- package/docs/usage/compositions/action-recovery-undo.md +4 -2
- package/docs/usage/compositions/activity-status.md +3 -1
- package/docs/usage/compositions/adaptive-content.md +4 -2
- package/docs/usage/compositions/authoring-tools.md +3 -1
- package/docs/usage/compositions/collection-detail.md +3 -1
- package/docs/usage/compositions/collection-editing.md +4 -2
- package/docs/usage/compositions/command-records.md +3 -1
- package/docs/usage/compositions/common-message.md +3 -1
- package/docs/usage/compositions/common-notification.md +3 -1
- package/docs/usage/compositions/communication.md +3 -1
- package/docs/usage/compositions/compound-controls.md +4 -2
- package/docs/usage/compositions/content-transition-comparison.md +3 -1
- package/docs/usage/compositions/context-toolbar.md +4 -2
- package/docs/usage/compositions/data-layouts.md +4 -2
- package/docs/usage/compositions/data-workflows.md +4 -2
- package/docs/usage/compositions/date-entry.md +3 -1
- package/docs/usage/compositions/date-time-selection.md +3 -1
- package/docs/usage/compositions/design-profile-comparison.md +3 -1
- package/docs/usage/compositions/disclosure.md +6 -4
- package/docs/usage/compositions/document-resource.md +3 -1
- package/docs/usage/compositions/environment-matrix.md +3 -1
- package/docs/usage/compositions/expo-interactions.md +4 -2
- package/docs/usage/compositions/family-drawer.md +4 -2
- package/docs/usage/compositions/field-group.md +3 -1
- package/docs/usage/compositions/floating-action-button.md +3 -1
- package/docs/usage/compositions/illustrated-outcome.md +3 -1
- package/docs/usage/compositions/input-sheet.md +3 -1
- package/docs/usage/compositions/interaction-adapters.md +3 -1
- package/docs/usage/compositions/interaction-flow-apply.md +3 -1
- package/docs/usage/compositions/interaction-flow-draft.md +3 -1
- package/docs/usage/compositions/interaction-flow-search.md +3 -1
- package/docs/usage/compositions/live-list.md +3 -1
- package/docs/usage/compositions/media-transport.md +4 -2
- package/docs/usage/compositions/native-renderers.md +3 -1
- package/docs/usage/compositions/navigation-bar-collection.md +3 -1
- package/docs/usage/compositions/optional-adapters.md +3 -1
- package/docs/usage/compositions/optional-motion.md +3 -1
- package/docs/usage/compositions/origin-dialog.md +3 -1
- package/docs/usage/compositions/paper-surface.md +3 -1
- package/docs/usage/compositions/photo-source.md +3 -1
- package/docs/usage/compositions/purpose-input-comment.md +8 -2
- package/docs/usage/compositions/purpose-input-message.md +4 -2
- package/docs/usage/compositions/reference-first.md +3 -1
- package/docs/usage/compositions/reference-review.md +3 -1
- package/docs/usage/compositions/reference-settings.md +3 -1
- package/docs/usage/compositions/selection-motion.md +4 -2
- package/docs/usage/compositions/selection-scope.md +3 -1
- package/docs/usage/compositions/social-compositions.md +3 -1
- package/docs/usage/compositions/stea-event-ticket.md +3 -1
- package/docs/usage/compositions/stea-flip-card.md +4 -2
- package/docs/usage/compositions/stea-order-progress.md +5 -3
- package/docs/usage/compositions/stea-otp-verify.md +5 -3
- package/docs/usage/compositions/stea-pixel-empty.md +5 -3
- package/docs/usage/compositions/stea-schedule-card.md +5 -3
- package/docs/usage/compositions/stea-stat-summary.md +4 -2
- package/docs/usage/compositions/streaming-answer.md +3 -1
- package/docs/usage/compositions/task-controls.md +4 -2
- package/docs/usage/compositions/texture-comparison.md +3 -1
- package/docs/usage/compositions/time-selection.md +5 -3
- package/docs/usage/compositions/toast-layout.md +3 -1
- package/docs/usage/compositions/toggle-feedback.md +3 -1
- package/docs/usage/compositions/transfer-task.md +4 -2
- package/docs/usage/compositions/upload-recovery.md +4 -2
- package/docs/usage/compositions/video-dialog.md +3 -1
- package/docs/usage/compositions/visual-foundations.md +5 -3
- package/docs/usage/compositions/web-additions.md +6 -4
- package/docs/usage/compositions/web-navigation.md +4 -2
- package/docs/usage/screens/common-chat.md +3 -1
- package/docs/usage/screens/common-comments.md +6 -4
- package/docs/usage/screens/common-inbox.md +3 -1
- package/docs/usage/screens/common-login.md +3 -1
- package/docs/usage/screens/common-profile.md +3 -1
- package/docs/usage/screens/common-saved.md +3 -1
- package/docs/usage/screens/common-search.md +3 -1
- package/docs/usage/screens/common-settings.md +3 -1
- package/docs/usage/screens/common-shell.md +3 -1
- package/docs/usage/screens/dashboard.md +3 -1
- package/docs/usage/screens/discovery-gallery.md +3 -1
- package/docs/usage/screens/flow-collection.md +3 -1
- package/docs/usage/screens/flow-editor.md +3 -1
- package/docs/usage/screens/flow-media.md +3 -1
- package/docs/usage/screens/flow-moderation.md +3 -1
- package/docs/usage/screens/flow-onboarding.md +3 -1
- package/docs/usage/screens/flow-permission.md +3 -1
- package/docs/usage/screens/landing.md +4 -2
- package/docs/usage/screens/mockup-studio.md +3 -1
- package/docs/usage/screens/notification-settings.md +32 -138
- package/docs/usage/screens/product-bento.md +3 -1
- package/docs/usage/screens/reference-comparison.md +3 -1
- package/package.json +1 -1
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.23.0\" as const;\n"]}
|
package/docs/authoring-tools.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 편집 도구 구성 계약
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-15 · Lucian 116·141 · Storybook 배포 ·
|
|
3
|
+
검토일: 2026-10-15 · Lucian 116·141 · Storybook 배포 · npm 1.21.0
|
|
4
4
|
|
|
5
5
|
`@hjmds/design-contracts/authoring-tools`, `@hjmds/react/authoring-tools`,
|
|
6
6
|
`@hjmds/react-native/authoring-tools` 선택 subpath로 제공한다.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 목록 편집과 복구 구성
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-15 · 상태:
|
|
3
|
+
검토일: 2026-10-15 · 상태: Storybook 배포 · npm 1.21.0 · Web / React Native
|
|
4
4
|
|
|
5
5
|
Lucian UX/UI [#033](https://lucianlabs.dev/uxui-prompt/#033), [#092](https://lucianlabs.dev/uxui-prompt/#092),
|
|
6
6
|
[#131](https://lucianlabs.dev/uxui-prompt/#131), [#144](https://lucianlabs.dev/uxui-prompt/#144),
|
|
@@ -27,7 +27,7 @@ Lucian UX/UI [#033](https://lucianlabs.dev/uxui-prompt/#033), [#092](https://luc
|
|
|
27
27
|
- Web: `@hjmds/react/collection-editing`
|
|
28
28
|
- Native: `@hjmds/react-native/collection-editing`
|
|
29
29
|
- 순수 모델/헬퍼: `@hjmds/design-contracts/collection-editing`
|
|
30
|
-
- root barrel에 추가하지 않는다. 양 플랫폼 공개 API가 있지만
|
|
30
|
+
- root barrel에 추가하지 않는다. 양 플랫폼 공개 API가 있지만 1.21.0으로 게시되었으며 소비 앱에서 같은 버전을 설치한 뒤 사용한다.
|
|
31
31
|
- 다섯 구성은 각각 `배포/구성/…` Storybook에 있다. 실행 예제와 배치는 [사용 지침](usage/compositions/collection-editing.md)을 따른다.
|
|
32
32
|
|
|
33
33
|
## 주요 타입
|
|
@@ -80,4 +80,4 @@ Chromium에는 375px host에서 두 브랜드 fixture(violet/green)의 light/dar
|
|
|
80
80
|
|
|
81
81
|
새 Web story ID 15개는 원본을 읽는 기존 생성 로직으로 등록했다. 선택적 전체 Storybook 규약 검사에서
|
|
82
82
|
기존 `components-data-display--chart` ID의 snapshot 누락을 발견했지만 이번 구성과 무관해 변경하지 않았다.
|
|
83
|
-
전체 회귀·실기기·VoiceOver/TalkBack·성능
|
|
83
|
+
전체 회귀·실기기·VoiceOver/TalkBack·성능 측정·소비 화면 적용은 미실행이다. npm 1.21.0 게시·설치 범위는 도입 기록을 따른다.
|
package/docs/communication.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 검색·메시지 연결 구성 계약
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-15 · Lucian 027·028·078 · Storybook 배포 ·
|
|
3
|
+
검토일: 2026-10-15 · Lucian 027·028·078 · Storybook 배포 · npm 1.21.0
|
|
4
4
|
|
|
5
5
|
`@hjmds/{design-contracts,react,react-native}/communication` 선택 subpath를 제공한다.
|
|
6
6
|
기존 `screens`의 MessageComposer에는 선택 속성 `lengthFeedback`만 추가한다.
|
package/docs/data-workflows.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 데이터 해석과 가져오기 구성
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-15 · Storybook 배포 · Web/Native ·
|
|
3
|
+
검토일: 2026-10-15 · Storybook 배포 · Web/Native · npm 1.21.0
|
|
4
4
|
|
|
5
5
|
Lucian 130·160–164를 검토하면서 기존 표·차트·통계의 실제 데이터 연결을 재사용할 필요를 확인했다.
|
|
6
6
|
별도의 표/차트 엔진을 만들지 않고 DataTable, BarChart, Statistic, Progress, Select를 합성한다.
|
|
@@ -21,6 +21,6 @@ MatrixTable은 팀 간 비교에서 대각선을 숨기는 계약이므로 직
|
|
|
21
21
|
연결의 서버 검증, CSV 보안/인코딩, 저장·인증·권한·멱등성은 실제 제품 importer가 소유한다.
|
|
22
22
|
|
|
23
23
|
검증: 계산 6건, Web 브라우저 5건, Native host 2건 통과. 비동기 공통 helper 추출 후 기존 목록 편집 Web 7건/Native 5건 통과.
|
|
24
|
-
Native 실제 기기·제품
|
|
24
|
+
Native 실제 기기·제품 연결·운영 배포는 미실행이다. npm 1.21.0 게시·artifact 확인은 도입 기록을 따른다.
|
|
25
25
|
|
|
26
26
|
신규 6개 개발 Storybook 화면 확인. 두 제품 팔레트 light/dark 및 375px host 검사 통과. 본 작업의 6012 검사용 서버·탭 종료, 기존 6006 서버 보존.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Component maturity and evidence manifest
|
|
2
2
|
|
|
3
|
-
> Generated from `@hjmds/design-contracts` 1.
|
|
3
|
+
> Generated from `@hjmds/design-contracts` 1.23.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
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"designSystemVersion": "1.
|
|
3
|
+
"designSystemVersion": "1.23.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.23.0",
|
|
9
9
|
"activeComponents": 104,
|
|
10
10
|
"claimedComponents": 103,
|
|
11
11
|
"completeScenarioComponents": 103,
|
|
@@ -5672,7 +5672,7 @@
|
|
|
5672
5672
|
},
|
|
5673
5673
|
"native": {
|
|
5674
5674
|
"packageName": "@hjmds/react-native",
|
|
5675
|
-
"packageVersion": "1.
|
|
5675
|
+
"packageVersion": "1.23.0",
|
|
5676
5676
|
"activeComponents": 85,
|
|
5677
5677
|
"claimedComponents": 83,
|
|
5678
5678
|
"completeScenarioComponents": 83,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Renderer evidence coverage
|
|
2
2
|
|
|
3
|
-
> Generated for HJM 1.
|
|
3
|
+
> Generated for HJM 1.23.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
|
|
package/docs/media-transport.md
CHANGED
package/docs/screen-patterns.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 반복 화면 조합
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-
|
|
3
|
+
검토일: 2026-10-15 · 상태: Storybook 배포(2026-10-06 사용자 승인) · 패키지 적용 범위는 개별 API 사용 지침 참조
|
|
4
4
|
|
|
5
5
|
사용자가 로그인·설정·알림·채팅 화면을 미리 일반화해 개발 생산성을 높이도록 요청했다.
|
|
6
6
|
기존 AuthScreenLayout, Section, ListRow, TopBar, Layout, EmptyState, action-session,
|
|
@@ -23,6 +23,9 @@ Flutter 앱에는 React 컴포넌트를 주입할 수 없다. 화면 역할과
|
|
|
23
23
|
|
|
24
24
|
## 선택 기준과 소유권
|
|
25
25
|
|
|
26
|
+
모든 화면·구성의 공통 구조는 HJM이 제공한다. [선택 지침](usage/SELECTION.md)의 소유권을 따르며, 제품은 데이터·문구·추가 기능만 연결한다. 전용 구성이 없는 영역은 `CompositionLayout`, 가상화 댓글 행은 `CommentThreadRow`를 사용해 기본 배치를 복제하지 않는다. 두 API는 현재 checkout의 미게시 추가분이다.
|
|
27
|
+
|
|
28
|
+
|
|
26
29
|
- 로그인: 기존 `auth-screen`의 `AuthScreenLayout` + `AuthProviderButton`을 그대로 쓴다.
|
|
27
30
|
새 LoginScreen alias나 제공자 preset은 만들지 않는다. 카드 유지·중앙 로딩·정책 고지는
|
|
28
31
|
[로그인 계약](auth-screen.md)을 따른다.
|
|
@@ -38,8 +41,10 @@ Flutter 앱에는 React 컴포넌트를 주입할 수 없다. 화면 역할과
|
|
|
38
41
|
- `ChatMessage`: 발신/수신 정렬, 작성자, 아바타, 답장 인용, 전송 상태와 시각을 합성한다.
|
|
39
42
|
기존 Asset/VoiceNote 등은 children에 넣고 영수증·반응·재시도는 제품이 넘긴다. 전체 타임라인을
|
|
40
43
|
live region으로 만들지 않으므로 과거 메시지 로딩 때 읽기 순서를 가로채지 않는다.
|
|
41
|
-
- `MessageComposer`: 기존 TextArea와 Button을 조합한다.
|
|
42
|
-
전송하지
|
|
44
|
+
- `MessageComposer`: 기존 TextArea와 Button을 조합한다. 글·첨부·추가 콘텐츠가 모두 없거나 pending·disabled이면
|
|
45
|
+
전송하지 않는다. Enter는 기본 줄바꿈이며 데스크톱 채팅의 Enter 전송은 공개 `submitMode="send"`로 선택한다.
|
|
46
|
+
Web의 Shift+Enter·IME 조합 중 Enter는 전송하지 않는다. 제품별 키 처리로 이 보호를 우회하지 않는다.
|
|
47
|
+
세부 플랫폼 동작은 [MessageComposer 사용 지침](usage/components/message-composer.md)을 따른다. 제품 onSend에 원문을
|
|
43
48
|
전달하며 초안 초기화는 서버 영수증을 받은 제품만 수행한다. 1~5줄은 짧은 작성창이 타임라인을
|
|
44
49
|
밀어내지 않도록 정한 기본값이며 더 긴 입력은 TextArea 안에서 스크롤한다.
|
|
45
50
|
- `ChatScreen`: `composer`와 타임라인을 분리한다. 기본 `scroll="content"`로 FlatList 등
|
|
@@ -66,7 +71,9 @@ Web host는 실제 남은 높이를 제공해야 한다(예: flex route의 `heig
|
|
|
66
71
|
`height:100dvh`). Native host는 safe area와 탭/상단 navigation inset을 먼저 제외한다.
|
|
67
72
|
HJM이 기종별 높이나 중첩 safe area를 추측하지 않는다. Native ChatScreen은 기존
|
|
68
73
|
`KeyboardAvoiding` 또는 제품 keyboard adapter 하나로 감싸며 둘을 동시에 적용하지 않는다.
|
|
69
|
-
|
|
74
|
+
채팅 작성창은 `ready`와 `empty`에서 유지하고 `loading`·`error`·`restricted`에서 숨긴다.
|
|
75
|
+
빈 대화에서도 첫 메시지를 작성할 수 있어야 하기 때문이다. 전송 실패는 기존 `ready` 또는 `empty`와
|
|
76
|
+
초안을 유지한 채 `notice`로 알린다. [채팅 화면 지침](usage/screens/common-chat.md#첫-메시지부터-실패-복구까지)을 따른다.
|
|
70
77
|
|
|
71
78
|
## 사용 예시
|
|
72
79
|
|
package/docs/streaming-answer.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 스트림 응답과 중지 계약
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-15 · Lucian 086 · Storybook 배포 ·
|
|
3
|
+
검토일: 2026-10-15 · Lucian 086 · Storybook 배포 · npm 1.21.0
|
|
4
4
|
|
|
5
5
|
`@hjmds/{design-contracts,react,react-native}/streaming-answer` 선택 subpath를 제공한다.
|
|
6
6
|
고정 답변을 글자 단위로 재생하거나 타이머로 완료시키지 않고 실제 제공자 이벤트를 소비한다.
|
package/docs/task-controls.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 선택 뒤 실제 작업을 실행하는 구성
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-15 · Storybook 배포 ·
|
|
3
|
+
검토일: 2026-10-15 · Storybook 배포 · npm 1.21.0 · Web/Native
|
|
4
4
|
|
|
5
5
|
Lucian 010·036·037·056의 공통 작업 흐름을 기존 Menu/Button/PasswordField/Progress/RadioGroup/Card로 합성한다.
|
|
6
6
|
새 메뉴·입력·작업 상태 엔진을 만들지 않는다. 공개 진입점은 `@hjmds/{react,react-native}/task-controls`,
|
package/docs/toggle-feedback.md
CHANGED
package/docs/transfer-task.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 실제 전송 진행과 취소
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-15 · Storybook 배포 · Web/Native ·
|
|
3
|
+
검토일: 2026-10-15 · Storybook 배포 · Web/Native · npm 1.21.0
|
|
4
4
|
|
|
5
5
|
Lucian 004·083의 시간 기반 진행 시연을 실제 전송량·작업 종료·취소 신호와 연결하기 위해 기존 Button/Progress를 합성한다.
|
|
6
6
|
단순 외부 controlled 진행 표시만 필요하면 Progress를 직접 쓴다. TransferTask는 시작 요청·중복 방지·AbortSignal·실패 재시도가 함께 필요할 때 쓴다.
|
package/docs/usage/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
버튼 위치에서 시작해 구성·컴포넌트 지침으로 내려가고, 값은 토큰 지침에서 고른다.
|
|
7
7
|
[선택 기준](SELECTION.md)으로 그대로 사용·공개 슬롯 확장·제품 전용 구성을 고른다. 설치 버전의 지침을 본다: `node_modules/@hjmds/design-contracts/docs/usage/`.
|
|
8
8
|
제공 기준은 확인한 기본 API 버전이며 최초 출시 버전이 아니다. 구성·화면은 각 API 지침의 제공 버전을 확인한다.
|
|
9
|
-
API 안정성은 1.
|
|
9
|
+
API 안정성은 1.22.0의 생성 manifest에서 읽은 정규(canonical) API 기준이다. 동반·선택형 확장은 개별 계약을 확인한다.
|
|
10
10
|
Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품 반영을 의미하지 않는다.
|
|
11
11
|
`분류`는 Storybook 제목 `<배포|실험>/<단계>/<분류>/<항목>`의 셋째 마디이고, 토큰·구성·화면은 Storybook 메뉴와 같은 순서다.
|
|
12
12
|
|
|
@@ -54,7 +54,7 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
|
|
|
54
54
|
| [Card](components/card.md) | 데이터 표시 | 문서 metadata·미리보기·내보내기 상태는 실험 구성 DocumentResource를 먼저 대조한다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
|
|
55
55
|
| [Carousel](components/carousel.md) | 데이터 표시 | 한 번에 카드 하나만 보이고 사용자가 순서대로 넘겨 보는 유한한 묶음에 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
|
|
56
56
|
| [Celebration](components/celebration.md) | 구성/직접 조작과 모션 | 목표 달성, 첫 완료처럼 드물게 일어나는 성공 순간에 한 번 터지는 색종이 효과에 쓴다. | 1.12.1 | Web · Native | 개별 API 계약 참조 | 배포 |
|
|
57
|
-
| [Chart](components/chart.md) | 데이터 표시 | 수치의 흐름·비교·몫·모양·관계를 그림으로 읽게 할 때 쓴다. |
|
|
57
|
+
| [Chart](components/chart.md) | 데이터 표시 | 수치의 흐름·비교·몫·모양·관계를 그림으로 읽게 할 때 쓴다. | 1.21.0 | Web · Native | Web beta / Native beta | 배포 |
|
|
58
58
|
| [ChatMessage](components/chat-message.md) | 구성/정보 표시 | DM·대화 타임라인의 메시지 한 개에 쓴다. | 1.17.1 | Web · Native | 개별 API 계약 참조 | 배포 |
|
|
59
59
|
| [ChatScreen](components/chat-screen.md) | 화면/소통 | DM·대화방처럼 헤더, 메시지 타임라인, 하단 작성창으로 이루어진 화면 한 장에 쓴다. | 1.17.1 | Web · Native | 개별 API 계약 참조 | 배포 |
|
|
60
60
|
| [Checkbox](components/checkbox.md) | 입력 | 독립된 예/아니오 하나를 고르는 항목에 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
|
|
@@ -66,6 +66,7 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
|
|
|
66
66
|
| [Combobox](components/combobox.md) | 입력 | 주어진 목록에서 하나를 고르는데 목록이 길어 입력으로 좁혀야 할 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
|
|
67
67
|
| [CommandPalette](components/command-palette.md) | 오버레이 | ⌘K 스타일로 앱 전체의 **행동**을 검색해 실행하는 모달에 쓴다. | 1.12.1 | Web | Web stable / Native unsupported | 배포 |
|
|
68
68
|
| [CommentThreadScreen](components/comment-thread-screen.md) | 화면/소통 | 게시물·콘텐츠 아래의 댓글 화면 한 장에 쓴다. | 1.17.1 | Web · Native | 개별 API 계약 참조 | 배포 |
|
|
69
|
+
| [CompositionLayout](components/composition-layout.md) | 화면/설정 | 카드·패널·화면 본문 안의 콘텐츠 묶음에 제목·배지·행동·안내·본문·하단 영역이 필요할 때 쓴다. | 미게시(1.22.0 이후) | Web · Native | 개별 API 계약 참조 | 배포 |
|
|
69
70
|
| [Container](components/container.md) | 레이아웃 | 화면 본문의 최대 폭과 좌우(논리 방향) 여백을 맞출 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native stable | 배포 |
|
|
70
71
|
| [ContentTransition](components/content-transition.md) | 시각 효과 | 같은 자리의 내용이 상태에 따라 바뀔 때(필터 결과 패널, 단계별 본문) 새 내용이 짧게 나타나도록 감싼다. | 1.12.1 | Web · Native | 개별 API 계약 참조 | 배포 |
|
|
71
72
|
| [ContextMenu](components/context-menu.md) | 탐색 | Web에서 제품이 소유한 영역(카드·목록 행·캔버스)의 우클릭·길게 누르기·Shift+F10에 명령 목록을 띄울 때 쓴다. | 1.12.1 | Web · Native | Web stable / Native unsupported | 배포 |
|
|
@@ -184,13 +185,13 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
|
|
|
184
185
|
| [단계별 드로어](compositions/family-drawer.md) | 입력과 작성 | 초대 → 설정 → 확인처럼 짧은 단계 2~5개를 현재 화면을 떠나지 않고 하단 시트 안에서 차례로 진행할 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
185
186
|
| [닫았다 열고 초안 이어쓰기](compositions/interaction-flow-draft.md) | 입력과 작성 | 메모·댓글처럼 시트에서 쓰던 글을 저장하지 않고 닫았다가 다시 열었을 때, 쓰던 초안을 그대로 이어 쓰게 할 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
186
187
|
| [댓글 작성](compositions/purpose-input-comment.md) | 입력과 작성 | 게시물·기록 아래에서 댓글이나 특정 댓글에 대한 답글을 남기고, 실패하면 글과 답글 대상을 그대로 남겨 다시 등록하게 할 때 쓴다. | 구성 API 지침 참조 | Web · Native | 구성 API별 | 배포 |
|
|
187
|
-
| [데이터 해석과 가져오기](compositions/data-workflows.md) | 입력과 작성 | CSV 열 연결, 순차 퍼널, 가입 시점별 잔존율, 지표 상관, 목표, 분포 구간 탐색에 쓴다. |
|
|
188
|
+
| [데이터 해석과 가져오기](compositions/data-workflows.md) | 입력과 작성 | CSV 열 연결, 순차 퍼널, 가입 시점별 잔존율, 지표 상관, 목표, 분포 구간 탐색에 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
188
189
|
| [메시지 작성](compositions/purpose-input-message.md) | 입력과 작성 | 대화 화면 하단에서 글과 사진 여러 장을 함께 보내고, 실패하면 글·사진·답장 대상을 그대로 남겨 다시 보내게 할 때 쓴다. | 구성 API 지침 참조 | Web · Native | 구성 API별 | 배포 |
|
|
189
|
-
| [목록 편집과 복구](compositions/collection-editing.md) | 입력과 작성 | 목록의 제목을 바로 고치거나, 입력 행을 늘리거나, 여러 항목에 같은 행동을 하거나, 빈 검색에서 조건을 풀거나, 표의 열을 설정할 때 쓴다. |
|
|
190
|
+
| [목록 편집과 복구](compositions/collection-editing.md) | 입력과 작성 | 목록의 제목을 바로 고치거나, 입력 행을 늘리거나, 여러 항목에 같은 행동을 하거나, 빈 검색에서 조건을 풀거나, 표의 열을 설정할 때 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
190
191
|
| [버튼에서 이어지는 편집](compositions/origin-dialog.md) | 입력과 작성 | 현재 화면의 항목을 짧게 편집하고 돌아올 때 출발 위치를 시각적으로 연결한다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
191
192
|
| [빠른 메모 작성](compositions/floating-action-button.md) | 입력과 작성 | 스크롤되는 기록 목록 위에 떠 있는 생성 버튼으로 짧은 입력 대화상자를 열고, 저장하면 새 항목을 목록 맨 위에 넣을 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
192
193
|
| [선택 내용 검토와 수정](compositions/reference-review.md) | 입력과 작성 | 선택 내용을 검토하고 수정 후 명시적으로 확정 흐름이 필요할 때 쓴다. | 구성 API 지침 참조 | Web · Native | 구성 API별 | 배포 |
|
|
193
|
-
| [선택과 실제 실행](compositions/task-controls.md) | 입력과 작성 | 선택만 하는 화면과 선택 뒤 실제 요청을 실행하는 화면의 상태를 혼동하지 않도록 도입했다. |
|
|
194
|
+
| [선택과 실제 실행](compositions/task-controls.md) | 입력과 작성 | 선택만 하는 화면과 선택 뒤 실제 요청을 실행하는 화면의 상태를 혼동하지 않도록 도입했다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
194
195
|
| [인증번호 확인과 다시 입력](compositions/stea-otp-verify.md) | 입력과 작성 | 문자·메일로 받은 숫자 인증번호를 입력하고 서버 확인을 기다린 뒤, 틀리면 남은 횟수를 보여 주고 다시 받게 하는 흐름에 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
195
196
|
| [입력 시트](compositions/input-sheet.md) | 입력과 작성 | 현재 화면 위에 하단 시트를 띄워 짧은 입력(이름 바꾸기, 메모 한 줄)을 받고, 키보드가 올라와도 본문을 스크롤하며 완료 버튼에 닿게 할 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
196
197
|
| [입력을 유지하는 도구](compositions/context-toolbar.md) | 입력과 작성 | 작성 중인 입력을 보존한 채 선택적 도구를 펼쳐야 할 때 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
@@ -201,7 +202,7 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
|
|
|
201
202
|
| [사진 촬영과 앨범 선택](compositions/photo-source.md) | 선택과 필터 | 명시적으로 선택 후 플랫폼 picker 실행 흐름이 필요할 때 쓴다. | 구성 API 지침 참조 | Web · Native | 구성 API별 | 배포 |
|
|
202
203
|
| [선택 후 적용·취소](compositions/interaction-flow-apply.md) | 선택과 필터 | 표시 방식·정렬·필터처럼 시트에서 여러 번 바꿔 본 뒤 적용을 눌러야 화면에 반영되고, 취소하거나 닫으면 기존 선택을 유지해야 할 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
203
204
|
| [시간 선택](compositions/time-selection.md) | 선택과 필터 | 알림 시각·마감 시각처럼 하루 안의 시각 하나를 시·분 두 Select로 나눠 고르게 할 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
204
|
-
| [펼치는 검색과 실제 메시지 답장](compositions/communication.md) | 선택과 필터 | 상단 검색 버튼에서 검색 영역을 펼치거나 채팅의 실제 메시지를 선택해 답장을 전송할 때 쓴다. |
|
|
205
|
+
| [펼치는 검색과 실제 메시지 답장](compositions/communication.md) | 선택과 필터 | 상단 검색 버튼에서 검색 영역을 펼치거나 채팅의 실제 메시지를 선택해 답장을 전송할 때 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
205
206
|
| [보관함과 페이지 이동](compositions/web-navigation.md) | 탐색과 이동 | Web에서 상위 보관함 → 하위 모음으로 들어가고, 그 모음의 긴 목록을 페이지 단위로 넘겨 보는 탐색에 쓴다. | 1.12.1 | Web | 구성 API별 | 배포 |
|
|
206
207
|
| [펼침과 메뉴](compositions/disclosure.md) | 탐색과 이동 | Web에서 내용을 숨겼다 펼치거나(Collapsible), 대상에 붙은 작업 메뉴를 우클릭·키보드로 열거나(ContextMenu), 데스크톱 앱처럼 상단 메뉴 막대를 두는(Menubar) 세 방식을 각각 보여 주는 모음이다. | 1.12.1 | Web | 구성 API별 | 배포 |
|
|
207
208
|
| [대화 메시지](compositions/common-message.md) | 정보 표시 | 말풍선 하나하나에 반응·답장·원문 이동·전송 실패 후 다시 보내기를 붙일 때 쓴다. | 구성 API 지침 참조 | Web · Native | 구성 API별 | 배포 |
|
|
@@ -215,25 +216,25 @@ Storybook 배포/실험은 예제 분류이며 npm 게시·기기 검증·제품
|
|
|
215
216
|
| [질감 비교](compositions/texture-comparison.md) | 정보 표시 | 기존 반복 점 grain과 불규칙한 정적 noise를 같은 배경·강도로 비교할 때 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
216
217
|
| [추가해도 유지되는 목록](compositions/live-list.md) | 정보 표시 | 입력 중인 목록에 새 데이터가 추가되거나 순서가 바뀌어도 기존 초안과 항목의 정체성을 유지할 때 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
217
218
|
| [카드 묶음과 긴 목록](compositions/data-layouts.md) | 정보 표시 | 많은 항목을 화면에 늘어놓을 방식을 고를 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
218
|
-
| [팔로우 프로필과 행사 참석 응답](compositions/social-compositions.md) | 정보 표시 | 프로필 팔로우나 행사 참석 응답의 실제 요청과 수치의 실패 복구가 필요할 때 사용한다. |
|
|
219
|
+
| [팔로우 프로필과 행사 참석 응답](compositions/social-compositions.md) | 정보 표시 | 프로필 팔로우나 행사 참석 응답의 실제 요청과 수치의 실패 복구가 필요할 때 사용한다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
219
220
|
| [그림과 시작 안내](compositions/illustrated-outcome.md) | 피드백과 복구 | 빈 목록에서 시작을 안내하고 짧은 온보딩을 거쳐 결과를 보여 줄 때 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
220
221
|
| [백그라운드 작업 상태](compositions/activity-status.md) | 피드백과 복구 | 사용자가 다른 화면을 보는 동안 계속되는 작업 하나(검수·생성·업로드)의 진행을 헤더의 작은 칩으로 알리고, 칩을 누르면 같은 작업의 패널 Toast가 열려 단계와 결과를 보여 줄 때 쓴다. | 미게시(1.17.2 이후) | Web · Native | 구성 API별 | 배포 |
|
|
221
222
|
| [버튼 완료 피드백](compositions/action-feedback.md) | 피드백과 복구 | 입력을 유지하며 저장의 진행·성공·재시도 가능 실패를 보여 줄 때 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
222
223
|
| [변경 저장과 이탈 확인](compositions/reference-settings.md) | 피드백과 복구 | 저장값과 편집 초안을 비교해 이탈 확인 흐름이 필요할 때 쓴다. | 구성 API 지침 참조 | Web · Native | 구성 API별 | 배포 |
|
|
223
224
|
| [보관과 실행 취소](compositions/action-recovery-undo.md) | 피드백과 복구 | 보관·숨기기·목록에서 빼기처럼 제품이 역연산을 제공하는 작업 뒤에, 같은 자리에서 실행 취소를 주고 그 복구 요청이 성공해야 화면을 되돌릴 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
224
225
|
| [선택과 오류 복구](compositions/upload-recovery.md) | 피드백과 복구 | 파일 선택과 전송 상태의 취소·재시도를 연결할 때 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
225
|
-
| [스트림 응답과 중지](compositions/streaming-answer.md) | 피드백과 복구 | 실제 provider가 보내는 응답 delta를 표시하고 중지·재생성·오류를 같은 영역에서 제공할 때 쓴다. |
|
|
226
|
+
| [스트림 응답과 중지](compositions/streaming-answer.md) | 피드백과 복구 | 실제 provider가 보내는 응답 delta를 표시하고 중지·재생성·오류를 같은 영역에서 제공할 때 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
226
227
|
| [저장과 재시도](compositions/action-recovery-save.md) | 피드백과 복구 | 입력한 내용을 서버에 저장하는 폼 한 덩어리에서 저장 중 중복 실행을 막고, 실패하면 입력을 지우지 않은 채 제출했던 값 그대로 다시 보낼 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
227
|
-
| [전송 진행과 취소](compositions/transfer-task.md) | 피드백과 복구 | 실제 다운로드·업로드·작업의 시작/대기/진행·취소·실패 복구를 한 구성으로 제공할 때 쓴다. |
|
|
228
|
+
| [전송 진행과 취소](compositions/transfer-task.md) | 피드백과 복구 | 실제 다운로드·업로드·작업의 시작/대기/진행·취소·실패 복구를 한 구성으로 제공할 때 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
228
229
|
| [중단해도 남는 현재 상태](compositions/expo-interactions.md) | 피드백과 복구 | 버튼으로 상태를 빠르게 바꾸거나 전환 도중 내용을 닫아도 현재 상태가 바로 보이고 남아야 하는 영역에 쓴다. | 1.12.1 | Native | 구성 API별 | 배포 |
|
|
229
230
|
| [즉시 반영과 복구](compositions/action-recovery-optimistic.md) | 피드백과 복구 | 북마크·좋아요·알림 켜기처럼 되돌려도 피해가 없는 저위험 토글을 누르는 즉시 화면에 반영하고, 서버가 실패하면 직전 확인 값으로 되돌릴 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
230
231
|
| [처리 단계와 재시도](compositions/stea-order-progress.md) | 피드백과 복구 | 주문·신청처럼 서버가 단계를 하나씩 확정하는 처리 과정을 보여 주고, 확정에 실패하면 같은 단계를 다시 요청하게 할 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
231
232
|
| [캐릭터와 시작 행동](compositions/stea-pixel-empty.md) | 피드백과 복구 | 아직 만든 것이 없는 첫 빈 화면에 제품 캐릭터를 움직여 보이고 첫 행동 하나로 이끌 때 쓴다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
232
233
|
| [끌기·밀기·화면 전환](compositions/interaction-adapters.md) | 직접 조작과 모션 | 순서 바꾸기·행 작업·내용 전환·카드 넘기기·달성 축하·카드 확대 화면 전환 같은 선택형 상호작용 어댑터를 한 화면에서 함께 쓸 때, 각 어댑터를 어디에 놓고 무엇으로 감싸야 하는지 확인하는 구성이다. | 1.12.1 | Web · Native | 구성 API별 | 배포 |
|
|
233
234
|
| [높이가 이어지는 패널](compositions/adaptive-content.md) | 직접 조작과 모션 | 패널의 길이가 달라질 때 아래 행동이 새 높이로 이동해야 하는 작은 내용 영역에 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
234
|
-
| [미디어 재생 제어](compositions/media-transport.md) | 직접 조작과 모션 | 실제 오디오/영상 엔진의 재생·일시 정지·유한 길이 탐색을 같은 구조로 제공할 때 쓴다. |
|
|
235
|
-
| [베지어·단축키 편집 도구](compositions/authoring-tools.md) | 직접 조작과 모션 | 제품 안의 모션 편집기에서 두 제어점의 곡선을 조정하거나 웹 앱의 사용자 단축키를 실제로 등록할 때 쓴다. |
|
|
236
|
-
| [선택 반응 버튼](compositions/toggle-feedback.md) | 직접 조작과 모션 | 구독·북마크·좋아요에서 선택 요청과 실제 인원 수의 실패 복구, 국소 모션이 함께 필요할 때 쓴다. |
|
|
235
|
+
| [미디어 재생 제어](compositions/media-transport.md) | 직접 조작과 모션 | 실제 오디오/영상 엔진의 재생·일시 정지·유한 길이 탐색을 같은 구조로 제공할 때 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
236
|
+
| [베지어·단축키 편집 도구](compositions/authoring-tools.md) | 직접 조작과 모션 | 제품 안의 모션 편집기에서 두 제어점의 곡선을 조정하거나 웹 앱의 사용자 단축키를 실제로 등록할 때 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
237
|
+
| [선택 반응 버튼](compositions/toggle-feedback.md) | 직접 조작과 모션 | 구독·북마크·좋아요에서 선택 요청과 실제 인원 수의 실패 복구, 국소 모션이 함께 필요할 때 쓴다. | 1.21.0 | Web · Native | 구성 API별 | 배포 |
|
|
237
238
|
| [선택 배경 이동](compositions/selection-motion.md) | 직접 조작과 모션 | 짧은 단일 선택의 현재 항목을 이어지는 배경으로 보여 줄 때 쓴다. | 1.14.0 | Web · Native | 구성 API별 | 배포 |
|
|
238
239
|
| [숫자 변화와 메뉴 변형](compositions/optional-motion.md) | 직접 조작과 모션 | 선택 설치 모션(숫자 자리 단위 변화, 메뉴 형태 변환)을 기존 컴포넌트 자리에 끼워 넣을 때 쓴다. | 1.12.1 | Web | 구성 API별 | 배포 |
|
|
239
240
|
| [이미지·시트·키보드 조작](compositions/optional-adapters.md) | 직접 조작과 모션 | Native 앱 한 화면에서 이미지 확대 보기, 끌어서 높이를 바꾸는 시트, OS 길게 누르기 메뉴, 키보드를 따라 올라가는 하단 행동을 함께 쓸 때 provider 중첩 순서와 각 요소의 자리를 확인하는 구성이다. | 1.12.1 | Native | 구성 API별 | 배포 |
|
package/docs/usage/SELECTION.md
CHANGED
|
@@ -1,34 +1,47 @@
|
|
|
1
1
|
# 화면과 구성 선택
|
|
2
2
|
|
|
3
|
-
검토일: 2026-10-
|
|
3
|
+
검토일: 2026-10-15
|
|
4
4
|
|
|
5
|
-
2026-10-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
2026-10-15 사용자 요청: 메시지·댓글에서 같은 HJM 부품을 사용해도 앱이 기본 배치와 상태 표시를
|
|
6
|
+
다시 조립하면서 UI가 달라졌다. 이 선택 기준은 모든 화면·구성에 적용한다. **공통 구조는 HJM이
|
|
7
|
+
완성해서 제공하고, 앱은 데이터·문구·브랜드·권한·추가 기능을 연결한다.**
|
|
8
8
|
|
|
9
9
|
## 선택 기준
|
|
10
10
|
|
|
11
11
|
| 선택 | 조건 | 구현 경로 |
|
|
12
12
|
| --- | --- | --- |
|
|
13
|
-
| 그대로 사용 |
|
|
14
|
-
| 공개 슬롯으로 확장 |
|
|
15
|
-
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
13
|
+
| 그대로 사용 | 제공하는 화면·구성이 제품의 목적에 맞는다 | HJM 공개 API에 데이터·문구·콜백 연결 |
|
|
14
|
+
| 공개 슬롯으로 확장 | 기본 흐름은 같고 제품 콘텐츠·추가 행동이 필요하다 | 정해진 슬롯에 콘텐츠를 공급하고 배치·상태 엔진은 HJM 유지 |
|
|
15
|
+
| 공통 API 보완 | 가상화·새 영역·동작을 기존 API로 표현할 수 없다 | HJM의 기존 구현을 확장하거나 공통 하위 구성을 공개한 뒤 앱에서 사용 |
|
|
16
|
+
| 제품 고유 기능 | 지도·편지·도구 실행 등 제품만의 도메인 경험이다 | HJM의 화면·구성 안 콘텐츠 슬롯에 연결. 제품 기능을 이유로 공통 헤더·입력·상태·배지를 복제하지 않음 |
|
|
17
|
+
|
|
18
|
+
## 소유권
|
|
19
|
+
|
|
20
|
+
| HJM이 제공하는 것 | 앱이 공급하는 것 |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| 영역 순서, 간격·정렬·폭, 헤더·본문·footer, 반응형 배치 | 제목·문구·브랜드 설정·실제 콘텐츠 |
|
|
23
|
+
| 목록 항목, 아바타·시각·배지·반응·메뉴의 기본 자리 | 작성자·시각·배지 의미/값·반응 종류·메뉴 항목 |
|
|
24
|
+
| 초기 로딩·빈 상태·오류의 영역 중앙 표시, 비차단 안내 자리 | 조회 상태·오류 문구·재시도 콜백 |
|
|
25
|
+
| 작성창·답장 대상·첨부·전송 상태, 확장 영역 배치 | 초안·수신 결과·사진 권한/업로드·제품 도구 카드 |
|
|
26
|
+
| 펼침·전환·포커스·제스처·접근성 표현 | 권한 판정·라우팅·서버 요청·저장·도메인 규칙 |
|
|
27
|
+
|
|
28
|
+
슬롯은 콘텐츠와 추가 기능의 연결점이다. header·footer·children이 ReactNode라는 이유로
|
|
29
|
+
제품에서 동일한 기본 구조를 다시 만드는 허용 경로로 해석하지 않는다. 배지는 의미·값을 앱이
|
|
30
|
+
결정하고 위치·간격·넘침 표현은 해당 HJM 구성과 Badge 계약을 따른다.
|
|
31
|
+
|
|
32
|
+
## 구현과 확인
|
|
33
|
+
|
|
34
|
+
- 화면 → 구성 → 컴포넌트 → 토큰 순으로 찾고 기존 공개 API와 양 renderer를 먼저 확인한다.
|
|
35
|
+
- 기존 API가 부족하면 HJM 내부 구현을 분리·확장한다. 같은 구성에 대한 앱별 대체 엔진을 만들지 않는다.
|
|
36
|
+
가상화 host는 제품이 연결할 수 있지만 댓글 행은 `CommentThreadRow`처럼 공통 표시를 재사용한다.
|
|
37
|
+
- 웹/RN은 플랫폼 adapter가 다르더라도 영역 순서·기본값·상태 의미를 공유한다. Native safe area·키보드와
|
|
38
|
+
Web host 높이는 외부 환경 입력이며 같은 inset·스크롤을 두 번 적용하지 않는다.
|
|
39
|
+
- 서버 실패·초안·권한은 제품 상태가 정본이다. HJM은 성공을 추정하거나 초안을 임의로 지우지 않는다.
|
|
40
|
+
- Showcase는 HJM 공개 구현에 fixture를 연결한다. fixture의 예시 데이터·지연·브랜드·제품 메뉴를
|
|
41
|
+
운영 기능으로 복사하지 않는다. 공개되지 않은 예제 조합은 먼저 HJM API로 옮겨야 하며,
|
|
42
|
+
문서가 있다는 이유로 재사용 구현이 완성됐다고 보고하지 않는다.
|
|
43
|
+
- 기존 소비 화면은 기능을 보존하며 이관한다. 설치 버전의 지원 여부를 확인하고 HJM 변경·제품 채택·
|
|
44
|
+
화면 확인·게시를 구분한다. 새로운 전수 검사·승인 게이트를 추가하지 않는다.
|
|
32
45
|
|
|
33
46
|
## 상태와 버전 읽기
|
|
34
47
|
|
package/docs/usage/STANDARD.md
CHANGED
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
## 1. 공통
|
|
11
11
|
|
|
12
|
+
화면·구성은 [소유권](SELECTION.md#소유권)에 맞춰 HJM 공개 구현과 앱의 데이터/확장 입력을 구분한다.
|
|
13
|
+
기본 배치·상태·배지·상호작용을 제품이 재조립하도록 안내하지 않는다. 실행 예제만 있는 조합은
|
|
14
|
+
공개 구현 여부를 명시하고, 예제를 앱에 복사하는 대신 기존 HJM API를 보완한다.
|
|
15
|
+
|
|
16
|
+
|
|
12
17
|
- 파일 위치: `usage/<단계 폴더>/<영어 kebab-case>.md`. 컴포넌트는 공개 계약 이름의 kebab(`QRCode` → `qr-code`).
|
|
13
18
|
- 제목 한 줄 `# <이름>`. 컴포넌트는 공개 계약 이름(`# Button`), 나머지는 Storybook의 마지막 이름(`# 간격`).
|
|
14
19
|
- 제목 바로 아래 **머리말 목록**을 이 순서·이 키로 둔다. 값이 없으면 `없음`.
|
|
@@ -126,7 +126,7 @@ import { Button } from "@hjmds/react-native/actions";
|
|
|
126
126
|
2026-10-10 사용자 요청으로 선택 시 추가되는 테두리를 제거했다. `selected` 접근성 상태와
|
|
127
127
|
contentBrand 글자·아이콘 색은 유지하며 키보드 focus outline은 선택과 별도로 유지한다.
|
|
128
128
|
|
|
129
|
-
## 저장 확정 라벨과 프레임 예약 (
|
|
129
|
+
## 저장 확정 라벨과 프레임 예약 (npm 1.21.0 · 2026-10-15)
|
|
130
130
|
|
|
131
131
|
`completion={{ confirmed, label }}`는 실제 mutation의 확정 결과를 표시한다. 두 라벨의
|
|
132
132
|
공간을 처음부터 예약하므로 `children`을 저장 중/완료 문구로 교체하지 않는다.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
- 단계: 컴포넌트
|
|
4
4
|
- 상태: 배포
|
|
5
5
|
- 지원: Web · Native
|
|
6
|
-
- 적용:
|
|
6
|
+
- 적용: 1.21.0
|
|
7
7
|
- 검토일: 2026-10-15
|
|
8
8
|
- 근거: [Chart](../../chart.md), `src/chart.ts`(`chartRecipe`, `describeChart`, `resolveLineGeometry`), `src/dataviz.ts`(`resolveDatavizSeriesColor`, `datavizChromeTokens`)
|
|
9
9
|
- 스토리북: `배포/컴포넌트/데이터 표시/차트`
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
| 이름 | 역할 | Web | Native |
|
|
29
29
|
| --- | --- | --- | --- |
|
|
30
30
|
| `CommentThreadScreen` | 화면 조합 | `/screen-flows` | `/screen-flows` |
|
|
31
|
+
| `CommentThreadRow` | 가상화 목록에서도 같은 댓글 행 재사용(1.23.0) | `/screen-flows` | `/screen-flows` |
|
|
31
32
|
| `CommentThreadItem`(타입) | 댓글 한 개의 데이터 | `/screen-flows` | `/screen-flows` |
|
|
32
33
|
|
|
33
34
|
루트 barrel에는 없다. optional native peer를 요구하지 않는다.
|
|
@@ -118,7 +119,7 @@ threadHeader도 댓글과 함께 숨겨지므로 항상 보여야 하는 안내
|
|
|
118
119
|
`TypeError`가 난다. 답글의 답글은 표현하지 않으므로 제품이 최상위로 평탄화한다.
|
|
119
120
|
- 모든 문구·시각·좋아요 수 라벨은 제품 i18n에서 만든다. `likeCountLabel`이 빈 문자열이면 그리지 않는다.
|
|
120
121
|
- 좋아요 저장·길게 누르기·이모지 선택, 답글 권한(`canReply`/`replyDisabled`)은 제품 데이터로 정한다.
|
|
121
|
-
- 기본 `scroll`은 `ScreenLayout`과 같은 `screen`이다.
|
|
122
|
+
- 기본 `scroll`은 `ScreenLayout`과 같은 `screen`이다. 이 화면 자체는 가상화하지 않는다. 가상화가 필요하면 `ScreenLayout scroll="content"` 안 플랫폼 목록에 `CommentThreadRow`를 연결한다. `scroll="content"`만 바꾼다고 이 화면이 가상화 목록이 되지는 않는다.
|
|
122
123
|
|
|
123
124
|
## 플랫폼 차이
|
|
124
125
|
|
|
@@ -145,3 +146,5 @@ trigger로 공급한다. `actions`는 자유 노드 슬롯을 유지하고 메
|
|
|
145
146
|
|
|
146
147
|
2026-10-12 Spint의 작성자 없는 개발 댓글에서 빈 머리글이 본문을 아래로 밀었다.
|
|
147
148
|
`author`와 `timeLabel`이 모두 비면 머리글 행을 생략해 avatar와 본문 시작 높이를 맞춘다. Web·Native 동일하다.
|
|
149
|
+
|
|
150
|
+
`CommentThreadRow`는 `item`, `onLike`, `onReply`, `replyLabel`을 받으며 화면 내부도 같은 구현을 사용한다. 가상화 host는 항목 ID·페이지·스크롤을 연결하고 댓글 내부 간격·작성자·본문·시각·반응·메뉴 배치를 복제하지 않는다. `bodyText`가 있으면 작성자와 본문을 이어 쓰고 시각을 하단에, 없으면 작성자와 시각을 머리글에 표시한다.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# CompositionLayout
|
|
2
|
+
|
|
3
|
+
- 단계: 컴포넌트
|
|
4
|
+
- 상태: 배포
|
|
5
|
+
- 지원: Web · Native
|
|
6
|
+
- 적용: 1.23.0
|
|
7
|
+
- 검토일: 2026-10-15
|
|
8
|
+
- 근거: 양 renderer `src/screens.tsx`, [소유권](../SELECTION.md#소유권). 제품별 제목·배지·상태·하단 영역 재조립을 줄이기 위해 기존 Stack·상태 계약을 합성한다.
|
|
9
|
+
- 스토리북: `배포/화면/설정/알림 설정`
|
|
10
|
+
|
|
11
|
+
## 언제 쓰나
|
|
12
|
+
|
|
13
|
+
카드·패널·화면 본문 안의 콘텐츠 묶음에 제목·배지·행동·안내·본문·하단 영역이 필요할 때 쓴다.
|
|
14
|
+
전용 구성 API가 있으면 그것을 우선 사용한다. 단순 Stack은 배치 primitive이며 이 구성은 영역 순서와 상태 교체를 소유한다.
|
|
15
|
+
|
|
16
|
+
## 쓰지 않을 때
|
|
17
|
+
|
|
18
|
+
| 상황 | 대신 쓸 것 |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| 전체 화면 높이와 고정 헤더/footer·스크롤 | [ScreenLayout](screen-layout.md) |
|
|
21
|
+
| 댓글·채팅 | [CommentThreadScreen](comment-thread-screen.md)·[ChatScreen](chat-screen.md) |
|
|
22
|
+
| 장식 표면 | [Surface](surface.md)를 바깥에 사용 |
|
|
23
|
+
|
|
24
|
+
## 공개 이름과 import
|
|
25
|
+
|
|
26
|
+
| 이름 | 역할 | Web | Native |
|
|
27
|
+
| --- | --- | --- | --- |
|
|
28
|
+
| `CompositionLayout` | 구성 골격 | `/screens` | `/screens` |
|
|
29
|
+
|
|
30
|
+
## 최소 사용 예
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
// Web
|
|
34
|
+
import { CompositionLayout } from "@hjmds/react/screens";
|
|
35
|
+
<CompositionLayout title={title} badge={badge} actions={actions}
|
|
36
|
+
notice={notice} state={state} stateAction={retry} footer={footer}>
|
|
37
|
+
{content}
|
|
38
|
+
</CompositionLayout>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
// Native
|
|
43
|
+
import { CompositionLayout } from "@hjmds/react-native/screens";
|
|
44
|
+
<CompositionLayout title={title} badge={badge} actions={actions}
|
|
45
|
+
notice={notice} state={state} stateAction={retry} footer={footer}>
|
|
46
|
+
{content}
|
|
47
|
+
</CompositionLayout>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 축과 기본값
|
|
51
|
+
|
|
52
|
+
| prop | 값 | 기본값 | 설명 |
|
|
53
|
+
| --- | --- | --- | --- |
|
|
54
|
+
| title / description | string | 없음 | 제품 지역화 문구 |
|
|
55
|
+
| leading / badge / actions | ReactNode | 없음 | 앞 콘텐츠·제목 옆 배지·끝 행동. 자리와 간격은 HJM |
|
|
56
|
+
| notice | ReactNode | 없음 | 초안을 유지하는 비차단 안내 |
|
|
57
|
+
| children | ReactNode | 없음 | 제품 도메인 콘텐츠 또는 HJM 전용 구성 |
|
|
58
|
+
| footer | ReactNode | 없음 | 본문 다음 보조/주 행동; 고정은 바깥 ScreenLayout 소유 |
|
|
59
|
+
| state | ScreenContentState | ready | 본문 교체; loading은 Spinner만 표시 |
|
|
60
|
+
| stateAction | ReactNode | 없음 | 본문 상태와 중앙 정렬되는 복구 행동 |
|
|
61
|
+
| layoutStyle | HjmCompositionStyleProp | 없음 | 부모가 제공하는 영역 크기·배치 |
|
|
62
|
+
|
|
63
|
+
## 배치
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
leading → 제목·배지 / 설명 → actions
|
|
67
|
+
notice
|
|
68
|
+
본문 또는 중앙 상태·복구
|
|
69
|
+
footer
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
| 항목 | 값 | 근거 |
|
|
73
|
+
| --- | --- | --- |
|
|
74
|
+
| 크기 | 부모의 가용 폭·높이 | 별도 고정 높이나 스크롤 없음 |
|
|
75
|
+
| 간격 | 영역 spacing.md 16, 제목 행 spacing.sm 12, 배지 spacing.xs 8, 제목/설명 spacing.xxs 4 | Stack props |
|
|
76
|
+
| 순서·정렬 | 머리글 → notice → 본문 → footer | renderer |
|
|
77
|
+
| 고정·스크롤 | 부모 HJM 화면이 소유, 자체 ScrollView 없음 | renderer |
|
|
78
|
+
| 좁은 폭·큰 글자 | 머리글·배지 줄바꿈, 본문 폭 축소 허용 | flexWrap·minWidth |
|
|
79
|
+
|
|
80
|
+
## 꼭 지킬 것
|
|
81
|
+
|
|
82
|
+
- 데이터·권한·초안·저장·배지 의미는 제품에서 연결한다. 전송 성공을 추정하거나 초안을 자동으로 지우지 않는다.
|
|
83
|
+
- 본문 교체는 초기 조회에, 기존 입력을 유지하는 실패는 notice에 연결한다.
|
|
84
|
+
- 중앙 상태는 이 구성에 주어진 영역을 기준으로 한다. 화면 높이를 임의 여백으로 흉내 내지 않는다.
|
|
85
|
+
- 별도 스크롤을 중첩하지 않는다. 기본 구조를 children 안에서 다시 만들지 않는다.
|
|
86
|
+
|
|
87
|
+
## 플랫폼 차이
|
|
88
|
+
|
|
89
|
+
| 항목 | Web | Native |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| 의미 | Heading·alert/status | header·accessibilityLiveRegion |
|
|
92
|
+
| 환경 | 부모 화면의 높이 | 부모 화면의 safe area·키보드 |
|
|
@@ -194,3 +194,7 @@ const sorted = sortDataTableRows(players, sort, (player, columnId) => toDataTabl
|
|
|
194
194
|
- 2026-10-14 작성 시점에 Native renderer와 Native Storybook 등록은 구현 중이다. Native 행은 renderer가 들어온 뒤 실제 Props와 다시 대조한다.
|
|
195
195
|
- `cellStyle`은 셀마다 호출된다. 백분위 표본(열 전체 값)은 함수 밖에서 한 번 만들어 두고 셀에서는 조회만 한다.
|
|
196
196
|
- `columnGroups`의 묶음은 고정 열 경계를 넘지 않게 나눈다. Web은 묶음 안 열이 모두 고정일 때만 묶음 머리 칸도 고정된다.
|
|
197
|
+
|
|
198
|
+
### ComparisonTable 중복 머리글
|
|
199
|
+
|
|
200
|
+
2026-10-14 야잘알 비교 화면에서 상단 선택 카드의 선수·시즌이 표에 반복되어 읽는 흐름을 끊었다. Web/Native의 `showSideNames={false}`로 시각 머리글만 숨긴다(기본 `true`). `sides`는 계속 전달하며 각 행의 접근성 이름에는 양쪽 이름과 수치를 보존한다. 상단에서 양쪽 대상을 식별할 수 있을 때만 사용한다. 행 여백과 막대 간격을 넓히고 지표·비우세 수치의 대비를 유지해 기록을 구분한다.
|
|
@@ -70,6 +70,7 @@ import { ScreenLayout } from "@hjmds/react-native/screens";
|
|
|
70
70
|
| prop | 값 | 기본값 | 설명 |
|
|
71
71
|
| --- | --- | --- | --- |
|
|
72
72
|
| `title` | `string` | 필수 | 화면 제목. `header`를 주면 접근성 이름으로만 쓴다 |
|
|
73
|
+
| `titleBadge` | `ReactNode` | 없음 | 기본 제목 바로 옆 배지. 값·의미는 제품, 간격·정렬은 HJM. `header` 교체 또는 제목 숨김이면 그리지 않는다. 1.23.0 추가 API |
|
|
73
74
|
| `header` | `ReactNode` | 없음 | 기존 navigator 헤더 유지용. 주면 기본 헤더(`leading`·제목·`description`·`actions`)를 그리지 않는다 |
|
|
74
75
|
| `description` | `string` | 없음 | 제목 아래 muted 설명 |
|
|
75
76
|
| `leading` · `actions` | `ReactNode` | 없음 | 제목 앞(뒤로 가기)·뒤(도구) 슬롯 |
|
|
@@ -154,6 +154,7 @@ import { SearchScreen } from "@hjmds/react-native/screen-flows";
|
|
|
154
154
|
| `suggestedQueries` | `{ title, items: string[] }` | 없음 | 검색 전(최근 검색 아래)과 검색어 때문인 0건 아래 Chip 줄. 누르면 확정 |
|
|
155
155
|
| `suggestions` | `{ items: { query, match?: { start, end } }[], commitLabel(query), countLabel(count), icon?, maxVisible? }` | 없음 | 입력 중 본문: 첫 행 `commitLabel`(그대로 확정) + 제안 최대 6행. `match` 범위는 굵게(Web). 개수를 `countLabel`로 낭독 |
|
|
156
156
|
| `resultSummary` | `{ count: number \| null, countLabel(count), loadingLabel, sort?, notice?, empty?: { title, description? } }` | 없음 | 결과 머리. `count = null`이면 개수 자리 Skeleton + `children` 대신 로딩 4행. `notice`는 개수 위(이전 결과 유지 오류). `count = 0`이면 개수 대신 `empty`로 EmptyState |
|
|
157
|
+
| `resultSummary.countVisibility` | `visible` · `hidden` | `visible` | `hidden`은 시각적 개수·개수 Skeleton만 숨기며 정렬·로딩 행·빈 상태·접근성 개수 알림은 유지한다. 2026-10-14 야잘알 검색 결과에서 개수 없는 목록을 요청해 추가한 선택형 축(미게시)이다 |
|
|
157
158
|
| `resultSummary.sort` | `{ label, triggerLabel, value, options: { id, label }[], onChange(id), icon? }` (Native는 `dismissLabel` 추가) | 없음 | 결과 머리 끝 Menu(single). 바꾸면 본문을 맨 위로 |
|
|
158
159
|
| `appliedFilters` | `{ items: { key, label }[], removeLabel(label), onRemove(key), clearAllLabel, onClearAll(), removeIcon? }` | 없음 | 결과 머리 아래 × 칩 + `모두 해제`. 개수는 trigger 이름과 0건 원인 판정에도 쓴다 |
|
|
159
160
|
| `filterSheet` | `{ open, onOpenChange(open), title, value, onApply(next), count(draft): number \| null, reset(draft), isDefault(draft), renderContent(draft, setDraft), labels: { close, reset, apply(count) }, size?, trigger? }` | 없음 | 열 때 `value`를 초안으로 복사, 닫히면 초안을 버림, 주 행동에서만 `onApply`. `count = 0`이면 주 행동 비활성, `isDefault`면 초기화 비활성. `trigger`를 주면 칩 줄 맨 앞에 `label(적용 개수)` Chip |
|