@hjmds/design-contracts 1.47.0 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/card.d.ts +5 -0
  2. package/dist/card.d.ts.map +1 -1
  3. package/dist/card.js +3 -0
  4. package/dist/card.js.map +1 -1
  5. package/dist/catalog.d.ts +56 -18
  6. package/dist/catalog.d.ts.map +1 -1
  7. package/dist/catalog.js +15 -11
  8. package/dist/catalog.js.map +1 -1
  9. package/dist/component-recipes.d.ts +5 -1
  10. package/dist/component-recipes.d.ts.map +1 -1
  11. package/dist/component-recipes.js +4 -2
  12. package/dist/component-recipes.js.map +1 -1
  13. package/dist/data-table.d.ts +12 -0
  14. package/dist/data-table.d.ts.map +1 -1
  15. package/dist/data-table.js +2 -0
  16. package/dist/data-table.js.map +1 -1
  17. package/dist/drawing-editor.d.ts +96 -0
  18. package/dist/drawing-editor.d.ts.map +1 -0
  19. package/dist/drawing-editor.js +43 -0
  20. package/dist/drawing-editor.js.map +1 -0
  21. package/dist/share-sheet.d.ts +115 -0
  22. package/dist/share-sheet.d.ts.map +1 -0
  23. package/dist/share-sheet.js +62 -0
  24. package/dist/share-sheet.js.map +1 -0
  25. package/dist/timeline.d.ts +7 -0
  26. package/dist/timeline.d.ts.map +1 -1
  27. package/dist/timeline.js +7 -0
  28. package/dist/timeline.js.map +1 -1
  29. package/dist/version.d.ts +1 -1
  30. package/dist/version.js +1 -1
  31. package/dist/version.js.map +1 -1
  32. package/docs/dialog.md +2 -3
  33. package/docs/drawing-editor.md +14 -0
  34. package/docs/generated/component-maturity.md +13 -12
  35. package/docs/generated/renderer-evidence.json +122 -22
  36. package/docs/generated/renderer-evidence.md +18 -16
  37. package/docs/generated/showcase-manifest.json +70 -19
  38. package/docs/optional-adapters.md +21 -5
  39. package/docs/stable-core.md +37 -0
  40. package/docs/timeline.md +13 -0
  41. package/docs/usage/README.md +13 -11
  42. package/docs/usage/components/badge.md +10 -1
  43. package/docs/usage/components/card.md +1 -0
  44. package/docs/usage/components/data-table.md +2 -0
  45. package/docs/usage/components/dialog.md +3 -3
  46. package/docs/usage/components/drawing-editor.md +133 -0
  47. package/docs/usage/components/follow-list-screen.md +3 -3
  48. package/docs/usage/components/image-choice-group.md +1 -1
  49. package/docs/usage/components/share-sheet.md +139 -0
  50. package/docs/usage/components/shared-transition-element.md +1 -1
  51. package/docs/usage/components/sheet.md +13 -1
  52. package/docs/usage/components/timeline.md +27 -3
  53. package/docs/usage/compositions/interaction-adapters.md +2 -2
  54. package/docs/usage/compositions/optional-adapters.md +2 -2
  55. package/docs/usage/screens/common-follow-list.md +3 -3
  56. package/package.json +12 -1
@@ -4,15 +4,32 @@
4
4
  - 상태: 배포
5
5
  - 지원: Web · Native
6
6
  - 적용: 1.12.1
7
- - 검토일: 2026-10-23
7
+ - 검토일: 2026-10-27
8
8
  - 근거: [Timeline](../../timeline.md), `src/timeline.ts`(`timelineRecipe`)
9
9
  - 스토리북: `배포/컴포넌트/데이터 표시/타임라인`
10
10
 
11
+ ## 기본 표현: 여행 일지 (2026-10-27 개발 소스, 미게시)
12
+
13
+ 사용자가 다이어리 비교 시안의 「여행 일지」를 선택한 뒤 옵션이 아닌 기본형으로 지정했다.
14
+ `variant` 기본값은 `journal`이다. 박스·선택 배경 없이 작은 점과 연결선으로 기록을 잇고 제목 아래에
15
+ 시각을 둔다. 이전 면·테두리 표현이 꼭 필요한 경우에만 `variant="record"`를 명시한다.
16
+
17
+ - 수동 기록은 모든 설명·metadata·기존 행동을 계속 표시한다. 경기 중계·버전 복구·활동 이력이 자동으로 접히지 않는다.
18
+ - `selectedId`/`onSelectedIdChange`가 있으면 선택한 기록의 설명·metadata만 펼친다. 다시 누르면 상세만 접고 선택은 유지한다.
19
+ - 다른 행·지도·날짜에서 선택을 바꾸면 새 기록을 펼친다. 제목·시각은 접어도 남는다. 펼침 상태·chevron은 HJM이 소유한다.
20
+ - Web 기본형은 `<ol><li><button aria-expanded aria-controls>`의 disclosure 목록이다. 모든 기록 버튼에 Tab으로 접근하고 ↑/↓/Home/End로 이동·선택할 수 있다. Enter/Space는 native button 동작으로 펼침을 전환한다.
21
+ - Native는 `Pressable`의 selected·expanded 상태를 제공한다. 접힌 설명은 접근성 이름에서도 제외한다.
22
+ - `tone`의 의미와 독립 행동의 접근성·가상화 경계는 유지한다. `emphasized`의 큰 배경 면은 journal에 적용하지 않는다.
23
+
24
+ 현재 사용처: 다이어리 웹·앱 여정, 번뚝 웹·앱 버전/이야기/피드 기록, 야잘알 앱 경기 중계·선수 경력,
25
+ Today갈게 partner-web·partner 활동 기록, portfolio-site 성과 이력. 이들은 기본 디자인 변경의 영향 대상이며
26
+ 제품별 기능·데이터를 바꾸거나 운영 반영을 확인했다는 뜻은 아니다. 웹·앱 Storybook에도 여행 일지 예제를 둔다.
27
+
11
28
  ## 언제 쓰나
12
29
 
13
30
  이미 일어난 일을 시간 순서대로 보여 줄 때 쓴다. 경기 플레이 기록, 이적·변경 이력, 주문 처리
14
31
  기록처럼 "무슨 일이 언제 있었나"를 위→아래 한 방향으로 나열한다. 현재 위치(커서)는 없다.
15
- 기록 하나를 골라 옆의 지도·상세를 바꿔야 하면 `selectedId`/`onSelectedIdChange`로 기록 자체를 선택 대상으로 만든다(개발 소스, 미게시).
32
+ 기록 하나를 골라 옆의 지도·상세를 바꿔야 하면 `selectedId`/`onSelectedIdChange`로 기록 자체를 선택·펼침 대상으로 만든다(개발 소스, 미게시).
16
33
 
17
34
  ## 쓰지 않을 때
18
35
 
@@ -20,7 +37,7 @@
20
37
  | --- | --- |
21
38
  | 흐름에서 지금 어디에 있는지(현재 단계) | [Steps](steps.md) |
22
39
  | 항목을 눌러 다른 화면으로 이동 | [List](list.md), [ListRow](list-row.md) |
23
- | 기록 옆에 번호·선택 `Button`을 두고 `tone`·`aria-pressed`로 선택을 흉내 | `selectedId`/`onSelectedIdChange`. 선택 표현·키보드·접근성 의미는 Timeline이 소유한다 |
40
+ | 기록 옆에 번호·선택 `Button`을 두고 `tone`·`aria-pressed`로 선택을 흉내 | `selectedId`/`onSelectedIdChange`. 선택·펼침·키보드·접근성 의미는 Timeline이 소유한다 |
24
41
  | 항목이 하나도 없음 | Timeline을 마운트하지 않고 [EmptyState](empty-state.md) |
25
42
  | 과거 기록을 더 불러옴 | Timeline 아래에 [LoadMore](load-more.md)를 합성 |
26
43
  | 항목별 짧은 배지 | `renderMetadata` 슬롯에 제품의 [Badge](badge.md) 또는 [Tag](tag.md)를 연결 |
@@ -73,6 +90,7 @@ import { Timeline } from "@hjmds/react-native/data-display";
73
90
 
74
91
  | prop | 값 | 기본값 | 설명 |
75
92
  | --- | --- | --- | --- |
93
+ | `variant` | `journal` · `record` | `journal` | 기본 여행 일지 / 이전 면·테두리 표현. 개발 소스, 미게시 |
76
94
  | `items`(필수) | `id`·`label` 필수, `timestamp`·`description`·`tone` 선택 | — | 배열 순서가 곧 표시 순서 |
77
95
  | `items[].dateTime` | string | — | timestamp의 원래 시각. Web time의 dateTime에 연결하며 표시 문구를 바꾸지 않는다. timestamp와 함께 사용 |
78
96
  | `items[].emphasized` | boolean | false | 기록 배경의 은은한 강조. 진행 커서·선택 상태를 만들지 않는다 |
@@ -89,6 +107,10 @@ import { Timeline } from "@hjmds/react-native/data-display";
89
107
 
90
108
  ## 배치
91
109
 
110
+ 기본 `journal`은 항목 사이 0, 위아래 `spacing.md` 16, 가로 안쪽 여백 0, dot 8, connector 1이다.
111
+ 선택 배경·테두리는 없으며 펼친 설명 앞에는 `spacing.xs` 8(Web), 본문 기본 간격 `spacing.xxs` 4(Native)를 쓴다.
112
+ 아래 표의 24/12/10 배치·중립 선택 면은 호환 `variant="record"`에 해당한다.
113
+
92
114
  | 항목 | 값 | 근거 |
93
115
  | --- | --- | --- |
94
116
  | 크기 | 각 항목은 [레일 16][본문] 두 열. 레일은 지름 10의 dot과 다음 항목까지 이어지는 1px connector. 기록 본문은 누름 대상이 아니며 `renderActions`가 있으면 별도의 행동 열을 추가한다 | `timelineRecipe`, `.hjm-timeline__item`·`__dot`·`__connector` |
@@ -110,6 +132,8 @@ import { Timeline } from "@hjmds/react-native/data-display";
110
132
 
111
133
  ## 플랫폼 차이
112
134
 
135
+ 아래 선택형 listbox/option 설명은 `variant="record"`이다. 기본 journal의 disclosure 의미는 위 기본 표현 절을 따른다.
136
+
113
137
  | 항목 | Web | Native |
114
138
  | --- | --- | --- |
115
139
  | 구조 | `<ol>` / `<li>`, dot·connector `aria-hidden` | `View` 행, rail·본문은 접근성 트리에서 숨김 |
@@ -15,7 +15,7 @@
15
15
  순서 바꾸기·행 작업·내용 전환·카드 넘기기·달성 축하·카드 확대 화면 전환 같은 선택형 상호작용 어댑터를 한 화면에서 함께 쓸 때, 각 어댑터를 어디에 놓고 무엇으로 감싸야 하는지 확인하는 구성이다.
16
16
 
17
17
  스토리는 2026-10-06 사용자 승인으로 스토리북 배포됐다. 어댑터 API 자체의 성숙도는 따로다: `sortable`·`swipe-actions`·`content-transition`·`carousel-motion`·`celebration`은
18
- Web·Native stable, Native `screen-transition`은 experimental이다. 각 어댑터는 root에서 재노출되지 않고 subpath로만 import하며, 제품에 해당 peer를 설치해야 한다.
18
+ Web·Native stable, Native `screen-transition`도 명시한 React Navigation host 범위에서 stable이다. 각 어댑터는 root에서 재노출되지 않고 subpath로만 import하며, 제품에 해당 peer를 설치해야 한다.
19
19
 
20
20
  ## 구성 요소
21
21
 
@@ -182,7 +182,7 @@ const gutter = resolveWindowClass(useWindowDimensions().width) === "compact" ? "
182
182
  | 행 작업 | 버튼 상시 노출 | 스와이프로 드러냄 + 상시 "작업 보기", `rowId`·`openRowId`·`actionsLabel` 필수 |
183
183
  | 카드 크기 | 부모 폭 | 측정한 `width`·`height` 필수 |
184
184
  | 축하 위치 | 자체 canvas | 스크롤 밖 화면 오버레이, Skia 필요 |
185
- | 화면 전환 | 없음(제품 라우터) | `screen-transition`(experimental, React Navigation 7.4.1 + exports patch) |
185
+ | 화면 전환 | 없음(제품 라우터) | `screen-transition`(stable, React Navigation 7.4.1 + 문서화한 patch) |
186
186
  | 제스처 host | — | 화면 루트 `GestureHandlerRootView` |
187
187
 
188
188
  ## 함정
@@ -14,7 +14,7 @@
14
14
 
15
15
  Native 앱 한 화면에서 이미지 확대 보기, 끌어서 높이를 바꾸는 시트, OS 길게 누르기 메뉴, 키보드를 따라 올라가는 하단 행동을 함께 쓸 때 provider 중첩 순서와 각 요소의 자리를 확인하는 구성이다.
16
16
 
17
- 네 어댑터(`image-viewer`·`sheet-gesture`·`context-menu-native`·`keyboard-controller`)는 모두 experimental이고 Native 전용이다. 링크된 네이티브 모듈이 필요하므로
17
+ 네 어댑터(`image-viewer`·`sheet-gesture`·`context-menu-native`·`keyboard-controller`)는 문서화한 peer/host 범위에서 stable이고 Native 전용이다. 링크된 네이티브 모듈이 필요하므로
18
18
  Expo Go가 아니라 호환 개발 클라이언트에서만 확인된다. 이 기능이 필요 없으면 기본 [Sheet](../components/sheet.md)·[ContextMenu](../components/context-menu.md)·
19
19
  [KeyboardAvoiding](../components/keyboard-avoiding.md)을 쓴다.
20
20
 
@@ -158,7 +158,7 @@ const gutter = resolveWindowClass(useWindowDimensions().width) === "compact" ? "
158
158
 
159
159
  | 항목 | Web | Native |
160
160
  | --- | --- | --- |
161
- | 지원 | 없음(기본 Sheet·ContextMenu 사용) | 네 어댑터 experimental |
161
+ | 지원 | 없음(기본 Sheet·ContextMenu 사용) | 네 어댑터 stable(명시한 peer/host 범위) |
162
162
  | 실행 환경 | — | 호환 개발 클라이언트(Expo Go 불가) |
163
163
 
164
164
  ## 함정
@@ -1,12 +1,12 @@
1
1
  # 팔로워와 팔로잉
2
2
 
3
3
  - 단계: 화면
4
- - 상태: 실험
4
+ - 상태: 배포
5
5
  - 지원: Web · Native
6
- - 적용: 미게시(1.46.1 이후)
6
+ - 적용: 1.47.0
7
7
  - 검토일: 2026-10-25
8
8
  - 근거: 사용자 Instagram 팔로워 화면 요청
9
- - 스토리북: `실험/화면/소통/팔로워와 팔로잉`
9
+ - 스토리북: `배포/화면/소통/팔로워와 팔로잉`
10
10
 
11
11
  ## 목적
12
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hjmds/design-contracts",
3
- "version": "1.47.0",
3
+ "version": "1.49.0",
4
4
  "description": "Renderer-neutral design contracts, tokens, recipes, and behaviors shared by HJM products.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -823,11 +823,22 @@
823
823
  "import": "./dist/shortcut-rail.js",
824
824
  "default": "./dist/shortcut-rail.js"
825
825
  },
826
+ "./share-sheet": {
827
+ "types": "./dist/share-sheet.d.ts",
828
+ "react-native": "./dist/share-sheet.js",
829
+ "import": "./dist/share-sheet.js",
830
+ "default": "./dist/share-sheet.js"
831
+ },
826
832
  "./components/time-picker": {
827
833
  "types": "./dist/time-picker.d.ts",
828
834
  "react-native": "./dist/time-picker.js",
829
835
  "import": "./dist/time-picker.js",
830
836
  "default": "./dist/time-picker.js"
837
+ },
838
+ "./components/drawing-editor": {
839
+ "types": "./dist/drawing-editor.d.ts",
840
+ "import": "./dist/drawing-editor.js",
841
+ "default": "./dist/drawing-editor.js"
831
842
  }
832
843
  },
833
844
  "files": [