@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
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "designSystemVersion": "1.47.0",
3
+ "designSystemVersion": "1.49.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.47.0",
9
- "activeComponents": 131,
10
- "claimedComponents": 131,
11
- "completeScenarioComponents": 130,
8
+ "packageVersion": "1.49.0",
9
+ "activeComponents": 132,
10
+ "claimedComponents": 132,
11
+ "completeScenarioComponents": 131,
12
12
  "components": [
13
13
  {
14
14
  "componentId": "text",
@@ -1785,7 +1785,7 @@
1785
1785
  {
1786
1786
  "componentId": "image-choice-group",
1787
1787
  "name": "ImageChoiceGroup",
1788
- "status": "beta",
1788
+ "status": "stable",
1789
1789
  "claimed": true,
1790
1790
  "subpath": "./image-choice",
1791
1791
  "exportNames": [
@@ -2417,6 +2417,56 @@
2417
2417
  ],
2418
2418
  "missingScenarios": []
2419
2419
  },
2420
+ {
2421
+ "componentId": "drawing-editor",
2422
+ "name": "DrawingEditor",
2423
+ "status": "beta",
2424
+ "claimed": true,
2425
+ "subpath": "./drawing-editor",
2426
+ "exportNames": [
2427
+ "DrawingEditor"
2428
+ ],
2429
+ "proofs": [
2430
+ {
2431
+ "scenarios": [
2432
+ "default"
2433
+ ],
2434
+ "file": "test/default-render.ssr.test.tsx",
2435
+ "caseId": "drawing-editor"
2436
+ },
2437
+ {
2438
+ "scenarios": [
2439
+ "dark",
2440
+ "long-copy",
2441
+ "large-text",
2442
+ "rtl",
2443
+ "reduced-motion",
2444
+ "accessibility"
2445
+ ],
2446
+ "file": "test/scenario-matrix.browser.test.tsx",
2447
+ "caseId": "drawing-editor"
2448
+ }
2449
+ ],
2450
+ "requiredScenarios": [
2451
+ "default",
2452
+ "dark",
2453
+ "long-copy",
2454
+ "large-text",
2455
+ "rtl",
2456
+ "reduced-motion",
2457
+ "accessibility"
2458
+ ],
2459
+ "claimedScenarios": [
2460
+ "default",
2461
+ "dark",
2462
+ "long-copy",
2463
+ "large-text",
2464
+ "rtl",
2465
+ "reduced-motion",
2466
+ "accessibility"
2467
+ ],
2468
+ "missingScenarios": []
2469
+ },
2420
2470
  {
2421
2471
  "componentId": "color-picker",
2422
2472
  "name": "ColorPicker",
@@ -3119,7 +3169,7 @@
3119
3169
  {
3120
3170
  "componentId": "page-indicator",
3121
3171
  "name": "PageIndicator",
3122
- "status": "beta",
3172
+ "status": "stable",
3123
3173
  "claimed": true,
3124
3174
  "subpath": "./carousel",
3125
3175
  "exportNames": [
@@ -4244,7 +4294,7 @@
4244
4294
  {
4245
4295
  "componentId": "chart",
4246
4296
  "name": "Chart",
4247
- "status": "beta",
4297
+ "status": "stable",
4248
4298
  "claimed": true,
4249
4299
  "subpath": "./chart",
4250
4300
  "exportNames": [
@@ -6616,7 +6666,7 @@
6616
6666
  {
6617
6667
  "componentId": "typing-indicator",
6618
6668
  "name": "TypingIndicator",
6619
- "status": "beta",
6669
+ "status": "stable",
6620
6670
  "claimed": true,
6621
6671
  "subpath": "./screens",
6622
6672
  "exportNames": [
@@ -6663,7 +6713,7 @@
6663
6713
  {
6664
6714
  "componentId": "chat-date-separator",
6665
6715
  "name": "ChatDateSeparator",
6666
- "status": "beta",
6716
+ "status": "stable",
6667
6717
  "claimed": true,
6668
6718
  "subpath": "./screens",
6669
6719
  "exportNames": [
@@ -7064,10 +7114,10 @@
7064
7114
  },
7065
7115
  "native": {
7066
7116
  "packageName": "@hjmds/react-native",
7067
- "packageVersion": "1.47.0",
7068
- "activeComponents": 114,
7069
- "claimedComponents": 114,
7070
- "completeScenarioComponents": 111,
7117
+ "packageVersion": "1.49.0",
7118
+ "activeComponents": 115,
7119
+ "claimedComponents": 115,
7120
+ "completeScenarioComponents": 112,
7071
7121
  "components": [
7072
7122
  {
7073
7123
  "componentId": "text",
@@ -8724,7 +8774,7 @@
8724
8774
  {
8725
8775
  "componentId": "image-choice-group",
8726
8776
  "name": "ImageChoiceGroup",
8727
- "status": "beta",
8777
+ "status": "stable",
8728
8778
  "claimed": true,
8729
8779
  "subpath": "./image-choice",
8730
8780
  "exportNames": [
@@ -9355,10 +9405,60 @@
9355
9405
  ],
9356
9406
  "missingScenarios": []
9357
9407
  },
9408
+ {
9409
+ "componentId": "drawing-editor",
9410
+ "name": "DrawingEditor",
9411
+ "status": "beta",
9412
+ "claimed": true,
9413
+ "subpath": "./drawing-editor",
9414
+ "exportNames": [
9415
+ "DrawingEditor"
9416
+ ],
9417
+ "proofs": [
9418
+ {
9419
+ "scenarios": [
9420
+ "default"
9421
+ ],
9422
+ "file": "test/default-render.test.tsx",
9423
+ "caseId": "drawing-editor"
9424
+ },
9425
+ {
9426
+ "scenarios": [
9427
+ "dark",
9428
+ "long-copy",
9429
+ "large-text",
9430
+ "rtl",
9431
+ "reduced-motion",
9432
+ "accessibility"
9433
+ ],
9434
+ "file": "test/scenario-matrix.test.tsx",
9435
+ "caseId": "drawing-editor"
9436
+ }
9437
+ ],
9438
+ "requiredScenarios": [
9439
+ "default",
9440
+ "dark",
9441
+ "long-copy",
9442
+ "large-text",
9443
+ "rtl",
9444
+ "reduced-motion",
9445
+ "accessibility"
9446
+ ],
9447
+ "claimedScenarios": [
9448
+ "default",
9449
+ "dark",
9450
+ "long-copy",
9451
+ "large-text",
9452
+ "rtl",
9453
+ "reduced-motion",
9454
+ "accessibility"
9455
+ ],
9456
+ "missingScenarios": []
9457
+ },
9358
9458
  {
9359
9459
  "componentId": "color-picker",
9360
9460
  "name": "ColorPicker",
9361
- "status": "beta",
9461
+ "status": "stable",
9362
9462
  "claimed": true,
9363
9463
  "subpath": "./color-picker",
9364
9464
  "exportNames": [
@@ -9931,7 +10031,7 @@
9931
10031
  {
9932
10032
  "componentId": "page-indicator",
9933
10033
  "name": "PageIndicator",
9934
- "status": "beta",
10034
+ "status": "stable",
9935
10035
  "claimed": true,
9936
10036
  "subpath": "./carousel",
9937
10037
  "exportNames": [
@@ -9978,7 +10078,7 @@
9978
10078
  {
9979
10079
  "componentId": "pagination",
9980
10080
  "name": "Pagination",
9981
- "status": "beta",
10081
+ "status": "stable",
9982
10082
  "claimed": true,
9983
10083
  "subpath": "./pagination",
9984
10084
  "exportNames": [
@@ -10810,7 +10910,7 @@
10810
10910
  {
10811
10911
  "componentId": "data-table",
10812
10912
  "name": "DataTable",
10813
- "status": "beta",
10913
+ "status": "stable",
10814
10914
  "claimed": true,
10815
10915
  "subpath": "./data-table",
10816
10916
  "exportNames": [
@@ -10866,7 +10966,7 @@
10866
10966
  {
10867
10967
  "componentId": "chart",
10868
10968
  "name": "Chart",
10869
- "status": "beta",
10969
+ "status": "stable",
10870
10970
  "claimed": true,
10871
10971
  "subpath": "./chart",
10872
10972
  "exportNames": [
@@ -12673,7 +12773,7 @@
12673
12773
  {
12674
12774
  "componentId": "typing-indicator",
12675
12775
  "name": "TypingIndicator",
12676
- "status": "beta",
12776
+ "status": "stable",
12677
12777
  "claimed": true,
12678
12778
  "subpath": "./screens",
12679
12779
  "exportNames": [
@@ -12720,7 +12820,7 @@
12720
12820
  {
12721
12821
  "componentId": "chat-date-separator",
12722
12822
  "name": "ChatDateSeparator",
12723
- "status": "beta",
12823
+ "status": "stable",
12724
12824
  "claimed": true,
12725
12825
  "subpath": "./screens",
12726
12826
  "exportNames": [
@@ -1,11 +1,11 @@
1
1
  # Renderer evidence coverage
2
2
 
3
- > Generated for HJM 1.47.0. Do not edit directly; run `pnpm evidence:sync`.
3
+ > Generated for HJM 1.49.0. Do not edit directly; run `pnpm evidence:sync`.
4
4
 
5
5
  This projection joins the canonical surface maturity manifest with first-party renderer claims. Missing scenarios are explicit beta promotion debt; stable surfaces are blocked by CI until none remain.
6
6
 
7
- - web: 131/131 active implementations; 130/131 required scenario sets
8
- - native: 114/114 active implementations; 111/114 required scenario sets
7
+ - web: 132/132 active implementations; 131/132 required scenario sets
8
+ - native: 115/115 active implementations; 112/115 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 | beta | @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 |
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 |
@@ -53,6 +53,7 @@ This projection joins the canonical surface maturity manifest with first-party r
53
53
  | TimePicker | web | stable | @hjmds/react | ./time-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#time-picker, test/scenario-matrix.browser.test.tsx#time-picker, test/time-picker.browser.test.tsx#time-picker |
54
54
  | DatePicker | web | stable | @hjmds/react | ./date-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#date-picker, test/scenario-matrix.browser.test.tsx#date-picker, test/stable-core.browser.test.tsx#date-picker |
55
55
  | DateRangePicker | web | stable | @hjmds/react | ./date-range | default, dark, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#date-range-picker, test/scenario-matrix.browser.test.tsx#date-range-picker, test/date-range.keyboard.browser.test.tsx#date-range-picker |
56
+ | DrawingEditor | web | beta | @hjmds/react | ./drawing-editor | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#drawing-editor, test/scenario-matrix.browser.test.tsx#drawing-editor |
56
57
  | ColorPicker | web | stable | @hjmds/react | ./color-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#color-picker, test/scenario-matrix.browser.test.tsx#color-picker, test/web-additions.browser.test.tsx#color-picker |
57
58
  | FilePicker | web | stable | @hjmds/react | ./file-picker | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#file-picker, test/scenario-matrix.browser.test.tsx#file-picker, test/file-picker.keyboard.browser.test.tsx#file-picker |
58
59
  | Form | web | stable | @hjmds/react | ./forms | default, dark, large-text, rtl, reduced-motion, accessibility, keyboard | none | test/default-render.ssr.test.tsx#form, test/scenario-matrix.browser.test.tsx#form, test/form.keyboard.browser.test.tsx#form |
@@ -65,7 +66,7 @@ This projection joins the canonical surface maturity manifest with first-party r
65
66
  | 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
67
  | 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
68
  | 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 | beta | @hjmds/react | ./carousel | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#page-indicator, test/scenario-matrix.browser.test.tsx#page-indicator |
69
+ | 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
70
  | 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
71
  | 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
72
  | 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 +87,7 @@ This projection joins the canonical surface maturity manifest with first-party r
86
87
  | 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
88
  | 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
89
  | 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 | beta | @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
+ | 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
91
  | 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
92
  | 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
93
  | 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 +132,8 @@ This projection joins the canonical surface maturity manifest with first-party r
131
132
  | 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
133
  | 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
134
  | 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 | beta | @hjmds/react | ./screens | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#typing-indicator, test/scenario-matrix.browser.test.tsx#typing-indicator |
135
- | ChatDateSeparator | web | beta | @hjmds/react | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.ssr.test.tsx#chat-date-separator, test/scenario-matrix.browser.test.tsx#chat-date-separator |
135
+ | 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 |
136
+ | 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
137
  | 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
138
  | 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
139
  | 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 +172,7 @@ This projection joins the canonical surface maturity manifest with first-party r
171
172
  | 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
173
  | 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
174
  | 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 | beta | @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
+ | 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
176
  | 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
177
  | 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
178
  | 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,7 +183,8 @@ This projection joins the canonical surface maturity manifest with first-party r
182
183
  | 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
184
  | 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
185
  | 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 | beta | @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 |
186
+ | DrawingEditor | native | beta | @hjmds/react-native | ./drawing-editor | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#drawing-editor, test/scenario-matrix.test.tsx#drawing-editor |
187
+ | 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 |
186
188
  | 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 |
187
189
  | 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 |
188
190
  | 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 |
@@ -192,8 +194,8 @@ This projection joins the canonical surface maturity manifest with first-party r
192
194
  | 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 |
193
195
  | 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 |
194
196
  | 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 |
195
- | PageIndicator | native | beta | @hjmds/react-native | ./carousel | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#page-indicator, test/scenario-matrix.test.tsx#page-indicator |
196
- | Pagination | native | beta | @hjmds/react-native | ./pagination | default, dark, large-text, rtl, reduced-motion, accessibility | native-actions | test/default-render.test.tsx#pagination, test/scenario-matrix.test.tsx#pagination |
197
+ | 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 |
198
+ | 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 |
197
199
  | 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 |
198
200
  | 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 |
199
201
  | 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 |
@@ -209,8 +211,8 @@ This projection joins the canonical surface maturity manifest with first-party r
209
211
  | 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 |
210
212
  | 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 |
211
213
  | 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 |
212
- | DataTable | native | beta | @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 | beta | @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 |
214
+ | 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 |
215
+ | 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 |
214
216
  | 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 |
215
217
  | 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 |
216
218
  | 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 |
@@ -245,8 +247,8 @@ This projection joins the canonical surface maturity manifest with first-party r
245
247
  | 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 |
246
248
  | 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 |
247
249
  | 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 |
248
- | TypingIndicator | native | beta | @hjmds/react-native | ./screens | default, dark, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#typing-indicator, test/scenario-matrix.test.tsx#typing-indicator |
249
- | ChatDateSeparator | native | beta | @hjmds/react-native | ./screens | default, dark, long-copy, large-text, rtl, reduced-motion, accessibility | none | test/default-render.test.tsx#chat-date-separator, test/scenario-matrix.test.tsx#chat-date-separator |
250
+ | 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 |
251
+ | 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 |
250
252
  | 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 |
251
253
  | 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 |
252
254
  | 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 |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "designSystemVersion": "1.47.0",
3
+ "designSystemVersion": "1.49.0",
4
4
  "packageName": "@hjmds/design-contracts",
5
5
  "components": [
6
6
  {
@@ -1717,10 +1717,10 @@
1717
1717
  "extensions": [],
1718
1718
  "category": "input",
1719
1719
  "platform": "shared",
1720
- "contractStatus": "beta",
1720
+ "contractStatus": "stable",
1721
1721
  "surfaces": {
1722
- "web": "beta",
1723
- "native": "beta"
1722
+ "web": "stable",
1723
+ "native": "stable"
1724
1724
  },
1725
1725
  "requirements": [
1726
1726
  {
@@ -2289,6 +2289,57 @@
2289
2289
  "authored": null
2290
2290
  }
2291
2291
  },
2292
+ {
2293
+ "id": "drawing-editor",
2294
+ "storyId": "input/drawing-editor",
2295
+ "name": "DrawingEditor",
2296
+ "label": "손그림 편집기",
2297
+ "companions": [],
2298
+ "extensions": [],
2299
+ "category": "input",
2300
+ "platform": "adaptive",
2301
+ "contractStatus": "beta",
2302
+ "surfaces": {
2303
+ "web": "beta",
2304
+ "native": "beta"
2305
+ },
2306
+ "requirements": [
2307
+ {
2308
+ "surface": "contract",
2309
+ "scenarios": [
2310
+ "contract"
2311
+ ]
2312
+ },
2313
+ {
2314
+ "surface": "web",
2315
+ "scenarios": [
2316
+ "default",
2317
+ "dark",
2318
+ "long-copy",
2319
+ "large-text",
2320
+ "rtl",
2321
+ "reduced-motion",
2322
+ "accessibility"
2323
+ ]
2324
+ },
2325
+ {
2326
+ "surface": "native",
2327
+ "scenarios": [
2328
+ "default",
2329
+ "dark",
2330
+ "long-copy",
2331
+ "large-text",
2332
+ "rtl",
2333
+ "reduced-motion",
2334
+ "accessibility"
2335
+ ]
2336
+ }
2337
+ ],
2338
+ "documentation": {
2339
+ "generated": "docs/generated/component-maturity.md",
2340
+ "authored": "docs/drawing-editor.md"
2341
+ }
2342
+ },
2292
2343
  {
2293
2344
  "id": "color-picker",
2294
2345
  "storyId": "input/color-picker",
@@ -2303,7 +2354,7 @@
2303
2354
  "contractStatus": "stable",
2304
2355
  "surfaces": {
2305
2356
  "web": "stable",
2306
- "native": "beta"
2357
+ "native": "stable"
2307
2358
  },
2308
2359
  "requirements": [
2309
2360
  {
@@ -2912,10 +2963,10 @@
2912
2963
  "extensions": [],
2913
2964
  "category": "navigation",
2914
2965
  "platform": "shared",
2915
- "contractStatus": "beta",
2966
+ "contractStatus": "stable",
2916
2967
  "surfaces": {
2917
- "web": "beta",
2918
- "native": "beta"
2968
+ "web": "stable",
2969
+ "native": "stable"
2919
2970
  },
2920
2971
  "requirements": [
2921
2972
  {
@@ -2964,7 +3015,7 @@
2964
3015
  "contractStatus": "stable",
2965
3016
  "surfaces": {
2966
3017
  "web": "stable",
2967
- "native": "beta"
3018
+ "native": "stable"
2968
3019
  },
2969
3020
  "requirements": [
2970
3021
  {
@@ -3936,7 +3987,7 @@
3936
3987
  "contractStatus": "stable",
3937
3988
  "surfaces": {
3938
3989
  "web": "stable",
3939
- "native": "beta"
3990
+ "native": "stable"
3940
3991
  },
3941
3992
  "requirements": [
3942
3993
  {
@@ -3994,10 +4045,10 @@
3994
4045
  "extensions": [],
3995
4046
  "category": "data-display",
3996
4047
  "platform": "shared",
3997
- "contractStatus": "beta",
4048
+ "contractStatus": "stable",
3998
4049
  "surfaces": {
3999
- "web": "beta",
4000
- "native": "beta"
4050
+ "web": "stable",
4051
+ "native": "stable"
4001
4052
  },
4002
4053
  "requirements": [
4003
4054
  {
@@ -6210,10 +6261,10 @@
6210
6261
  "extensions": [],
6211
6262
  "category": "feedback",
6212
6263
  "platform": "adaptive",
6213
- "contractStatus": "beta",
6264
+ "contractStatus": "stable",
6214
6265
  "surfaces": {
6215
- "web": "beta",
6216
- "native": "beta"
6266
+ "web": "stable",
6267
+ "native": "stable"
6217
6268
  },
6218
6269
  "requirements": [
6219
6270
  {
@@ -6259,10 +6310,10 @@
6259
6310
  "extensions": [],
6260
6311
  "category": "data-display",
6261
6312
  "platform": "adaptive",
6262
- "contractStatus": "beta",
6313
+ "contractStatus": "stable",
6263
6314
  "surfaces": {
6264
- "web": "beta",
6265
- "native": "beta"
6315
+ "web": "stable",
6316
+ "native": "stable"
6266
6317
  },
6267
6318
  "requirements": [
6268
6319
  {
@@ -1,6 +1,22 @@
1
1
  # Optional presentation adapters
2
2
 
3
- ## Image host extension — 2026-10-07 (unpublished)
3
+ ## Current support — 2026-10-26
4
+
5
+ The four Native entries `image-viewer`, `keyboard-controller`, `sheet-gesture` and
6
+ `context-menu-native` are **stable for the documented optional-peer/host contract**.
7
+ The Web image viewer counterpart is stable as well. This is API support, not a claim
8
+ that every OS, physical device or consuming product has been certified.
9
+
10
+ The promotion reuses the installed iOS/Android engine observations linked below and
11
+ reruns the affected host/browser behavior tests. The current iPhone 17 Pro / iOS 26.5
12
+ Showcase additionally confirmed image loading and dismissal, keyboard entry with the
13
+ dock above the IME and retained text after Done, and sheet input/open/close state.
14
+ The existing iOS system-menu Save and Android engine checks remain historical evidence;
15
+ Android was not connected for a new run. Spoken VoiceOver/TalkBack, release binaries
16
+ and per-product peer/linking validation remain consumer QA as for other stable APIs.
17
+ See [Stable Core](stable-core.md#2026-10-26-잔여-실험과-beta-승격).
18
+
19
+ ## Image host extension — 2026-10-07 implementation record
4
20
 
5
21
  Native ImageViewer accepts `renderImage` with the item, measured viewport width/height and
6
22
  `onReady`/`onError`. This lets a product retain Expo display events and cache policy without
@@ -18,7 +34,7 @@ previous/next buttons, not swipe paging. Mode, viewport, item and retry changes
18
34
  retire callbacks and reset readiness/position. Output-size means layout units, not physical device pixels.
19
35
  Host width/height are the computed image dimensions in inspection mode (possibly larger than the viewport).
20
36
  The [image usage guide](usage/components/image.md) defines labels, placement and review invalidation.
21
- This is unpublished and is not proof of Expo onDisplay validation or Utilverse adoption.
37
+ These host props are present in the 1.47.0 source/package train; their presence is not proof of Expo onDisplay validation or Utilverse adoption.
22
38
  The Native Modal accepts supportedOrientations in fullScreen presentation. Optional left/right
23
39
  safe-area insets protect controls and feedback in landscape while the gallery remains full width.
24
40
  Products must supply updated insets and permit rotation in their manifests; OS rotation lock still applies.
@@ -123,9 +139,9 @@ Expo Go cannot verify these linked native modules.
123
139
 
124
140
  Web stories: `배포/구성/직접 조작과 모션/숫자 변화와 메뉴 변형`. Native stories: `배포/구성/직접 조작과 모션/이미지·시트·키보드 조작` (the earlier 갤러리/모션 연동 and 실험실/선택적 연동 menus; moved by the 2026-10-06 user-approved Storybook promotion, which is not an API promotion).
125
141
  Tests cover adaptation logic and web browser behavior; native mocks cannot prove OS gestures,
126
- keyboard animation, accessibility focus, native linking or installed-device health. Keep native
127
- adapters experimental until iOS/Android device evidence exists. No consumer migration or publication
128
- is implied by adding these entries. The prior Motion Primitives candidate remains reference-only.
142
+ keyboard animation, accessibility focus, native linking or installed-device health. The current
143
+ stable decision also uses the installed-engine observations and scoped follow-up above. No consumer
144
+ migration or publication is implied by changing support status. The prior Motion Primitives candidate remains reference-only.
129
145
 
130
146
  A removal replaces the optional imports with canonical Statistic/Menu/Sheet/KeyboardAvoiding or
131
147
  product image/menu behavior and removes the matching peers. There is no persisted-state migration.
@@ -1,5 +1,42 @@
1
1
  # Stable Core
2
2
 
3
+ ## 2026-10-26 잔여 실험과 beta 승격
4
+
5
+ 사용자의 “다 올려” 지시에 따라 남아 있던 카탈로그 beta와 실험 화면을 승격했다.
6
+ 카탈로그의 계약/Web은 stable131·beta0, Native는 stable114·beta0·unsupported17이다.
7
+ 지원하지 않는 플랫폼을 새로 구현하거나 지원된다고 표시하지 않았다.
8
+
9
+ - 계약·Web·Native: ImageChoiceGroup, PageIndicator, Chart, TypingIndicator, ChatDateSeparator.
10
+ - Native surface: ColorPicker, Pagination, DataTable(Web/계약은 이미 stable).
11
+ - Storybook Web·Native: FollowListScreen의 `팔로워와 팔로잉`을 배포로 이동. Web id `common-follow-list` 유지.
12
+ - 선택형 image-viewer(Web·Native), Native keyboard-controller·sheet-gesture·context-menu-native 및
13
+ screen-transition은 문서화한 peer/host 범위의 API를 stable로 지원한다. optional import, native linking,
14
+ React Navigation7.4.1 host와 기존 package patch 전제는 유지한다. expo-router 통합을 새로 제공하지 않는다.
15
+ - Dialog의 optional motionOrigin도 문서화한 상태·초안 보존·종료/재열기 계약을 stable로 지원한다.
16
+ 모든 기기에서 같은 frame time이나 제품별 조합 검증을 보장한다는 뜻은 아니다.
17
+
18
+ 검사에서 ColorPicker의 누락된 default/environment fixture를 발견해 실제 공개 API fixture를 보완했다.
19
+ 새 fixture가 드러낸 RTL 문제는 색상 막대의 좌표 소유 위치인 Slider에서 고쳤다. painted track이 물리
20
+ 색상 축을 명시하고 드래그 계산·thumb·layout이 같은 방향을 쓰며, 일반 Slider는 제품 읽기 방향을 따른다.
21
+ 환경 proof는 명시적으로 고정한 하위 좌표계를 상속해 검사하고 고정 좌표가 그대로인지 단언한다.
22
+ 단순 catalog 이름/숫자를 복제하던 회귀 단언은 제거하고 per-surface 불변식과 독립 legacy/custom 검사를 유지했다.
23
+
24
+ 변경 범위 결과: Native 관련14파일69건, Web 관련9파일30건, 색상/일반 Slider 회귀15건(새 RTL 회귀 포함),
25
+ 승격 대상 환경 matrix Web35건·Native35건 통과. 최대 글자 조건은 실행하지 않았다. contracts의
26
+ component-references13건과 세 package build/typecheck를 확인했다. 두 Showcase typecheck도 통과했다.
27
+ 현재 iPhone17 Pro/iOS26.5의 기존 SDK58 개발 클라이언트와8084 Metro에서 이미지 실제 로딩/닫기,
28
+ 키보드 입력321→완료(값 유지·IME 위 dock), 시트 입력789→닫힘, 공유 카드→상세→목록, Dialog의
29
+ 실패 후 초안 유지→닫기/재열기→성공 저장과 팔로워 화면의 맞팔로우→회원 프로필→목록 복귀를 Device Hub로 확인했다. NativeContextMenu의 시스템 메뉴
30
+ Save 및 Android16 네 엔진 확인은 기존9월29일 증거를 재사용했다. 이번에 Android 연결 기기는 없었으며
31
+ 새 Android UI·물리 기기·VoiceOver/TalkBack·Release binary·성능 전수 결과로 확대하지 않는다.
32
+
33
+ 전체 Showcase 검사는 별개 기존 실패를 재현했다: 전체 스토리 규격74건 및 Native foundation token 문서
34
+ 2개 누락, Web Affix recipe fixture의 추가 sticky 값, 전체 usage의 Card/QuoteCard 문서3건이다.
35
+ 승격 대상 FollowList의 상태 표시 이름·스토리 순서는 고쳤으며 해당 두 스토리의 남은 규격 오류는0건이다.
36
+ 이번 FollowList 승격과 관계없는 항목을 수정하거나 전체 통과로 보고하지 않는다. 변경한 지침7개는
37
+ 선택 검사·색인 생성을 통과했다. 공개 source의 승격과 npm 게시·공개 Storybook 게시·제품 채택은
38
+ 별개이며, 이번 작업은1.47.0 버전을 유지하고 다음 train용 minor Changeset을 남긴다.
39
+
3
40
  ## 2026-10-19 TimePicker 개발 소스 승격
4
41
 
5
42
  사용자가 승인한 통합 시·분 열 디자인으로 `TimePicker`를 canonical catalog에 등록하고 계약·Web·Native