sh-ui-cli 0.14.0 → 0.21.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 (162) hide show
  1. package/bin/sh-ui.mjs +6 -0
  2. package/data/changelog/versions.json +354 -0
  3. package/data/registry/flutter/foundation/sh_ui_tokens.dart +385 -0
  4. package/data/registry/flutter/registry.json +336 -0
  5. package/data/registry/flutter/widgets/sh_ui_accordion.dart +255 -0
  6. package/data/registry/flutter/widgets/sh_ui_app_shell.dart +267 -0
  7. package/data/registry/flutter/widgets/sh_ui_avatar.dart +95 -0
  8. package/data/registry/flutter/widgets/sh_ui_badge.dart +82 -0
  9. package/data/registry/flutter/widgets/sh_ui_breadcrumb.dart +107 -0
  10. package/data/registry/flutter/widgets/sh_ui_button.dart +201 -0
  11. package/data/registry/flutter/widgets/sh_ui_card.dart +159 -0
  12. package/data/registry/flutter/widgets/sh_ui_carousel.dart +204 -0
  13. package/data/registry/flutter/widgets/sh_ui_checkbox.dart +154 -0
  14. package/data/registry/flutter/widgets/sh_ui_color_picker.dart +264 -0
  15. package/data/registry/flutter/widgets/sh_ui_combobox.dart +614 -0
  16. package/data/registry/flutter/widgets/sh_ui_context_menu.dart +71 -0
  17. package/data/registry/flutter/widgets/sh_ui_date_picker.dart +648 -0
  18. package/data/registry/flutter/widgets/sh_ui_dialog.dart +567 -0
  19. package/data/registry/flutter/widgets/sh_ui_dropdown_menu.dart +251 -0
  20. package/data/registry/flutter/widgets/sh_ui_file_upload.dart +200 -0
  21. package/data/registry/flutter/widgets/sh_ui_header.dart +488 -0
  22. package/data/registry/flutter/widgets/sh_ui_input.dart +664 -0
  23. package/data/registry/flutter/widgets/sh_ui_label.dart +145 -0
  24. package/data/registry/flutter/widgets/sh_ui_menubar.dart +98 -0
  25. package/data/registry/flutter/widgets/sh_ui_pagination.dart +276 -0
  26. package/data/registry/flutter/widgets/sh_ui_popover.dart +248 -0
  27. package/data/registry/flutter/widgets/sh_ui_progress.dart +47 -0
  28. package/data/registry/flutter/widgets/sh_ui_radio.dart +108 -0
  29. package/data/registry/flutter/widgets/sh_ui_select.dart +904 -0
  30. package/data/registry/flutter/widgets/sh_ui_separator.dart +42 -0
  31. package/data/registry/flutter/widgets/sh_ui_sidebar.dart +1116 -0
  32. package/data/registry/flutter/widgets/sh_ui_skeleton.dart +129 -0
  33. package/data/registry/flutter/widgets/sh_ui_slider.dart +147 -0
  34. package/data/registry/flutter/widgets/sh_ui_spinner.dart +56 -0
  35. package/data/registry/flutter/widgets/sh_ui_switch.dart +109 -0
  36. package/data/registry/flutter/widgets/sh_ui_tabs.dart +329 -0
  37. package/data/registry/flutter/widgets/sh_ui_textarea.dart +126 -0
  38. package/data/registry/flutter/widgets/sh_ui_toast.dart +362 -0
  39. package/data/registry/flutter/widgets/sh_ui_toggle.dart +229 -0
  40. package/data/registry/flutter/widgets/sh_ui_tooltip.dart +62 -0
  41. package/data/registry/react/components/accordion/index.tsx +85 -0
  42. package/data/registry/react/components/accordion/styles.css +94 -0
  43. package/data/registry/react/components/animations/animations.css +51 -0
  44. package/data/registry/react/components/avatar/index.tsx +75 -0
  45. package/data/registry/react/components/avatar/styles.css +36 -0
  46. package/data/registry/react/components/badge/index.tsx +42 -0
  47. package/data/registry/react/components/badge/styles.css +57 -0
  48. package/data/registry/react/components/base/base.css +102 -0
  49. package/data/registry/react/components/breadcrumb/index.tsx +154 -0
  50. package/data/registry/react/components/breadcrumb/styles.css +82 -0
  51. package/data/registry/react/components/breakpoints/breakpoints.css +17 -0
  52. package/data/registry/react/components/button/index.tsx +47 -0
  53. package/data/registry/react/components/button/styles.css +93 -0
  54. package/data/registry/react/components/card/index.tsx +86 -0
  55. package/data/registry/react/components/card/styles.css +73 -0
  56. package/data/registry/react/components/carousel/index.tsx +432 -0
  57. package/data/registry/react/components/carousel/styles.css +155 -0
  58. package/data/registry/react/components/checkbox/index.tsx +98 -0
  59. package/data/registry/react/components/checkbox/styles.css +75 -0
  60. package/data/registry/react/components/code-panel/copy.tsx +56 -0
  61. package/data/registry/react/components/code-panel/index.tsx +193 -0
  62. package/data/registry/react/components/code-panel/styles.css +124 -0
  63. package/data/registry/react/components/color-picker/index.tsx +466 -0
  64. package/data/registry/react/components/color-picker/styles.css +166 -0
  65. package/data/registry/react/components/combobox/index.tsx +167 -0
  66. package/data/registry/react/components/combobox/styles.css +151 -0
  67. package/data/registry/react/components/context-menu/index.tsx +253 -0
  68. package/data/registry/react/components/context-menu/styles.css +140 -0
  69. package/data/registry/react/components/date-picker/index.tsx +757 -0
  70. package/data/registry/react/components/date-picker/styles.css +279 -0
  71. package/data/registry/react/components/dialog/index.tsx +97 -0
  72. package/data/registry/react/components/dialog/styles.css +127 -0
  73. package/data/registry/react/components/dropdown-menu/index.tsx +257 -0
  74. package/data/registry/react/components/dropdown-menu/styles.css +150 -0
  75. package/data/registry/react/components/file-upload/index.tsx +489 -0
  76. package/data/registry/react/components/file-upload/styles.css +170 -0
  77. package/data/registry/react/components/focus-ring/focus-ring.css +23 -0
  78. package/data/registry/react/components/form/context.ts +92 -0
  79. package/data/registry/react/components/form/field.test.tsx +230 -0
  80. package/data/registry/react/components/form/field.tsx +236 -0
  81. package/data/registry/react/components/form/focus-first-error.ts +54 -0
  82. package/data/registry/react/components/form/form.section.test.tsx +58 -0
  83. package/data/registry/react/components/form/form.test.tsx +146 -0
  84. package/data/registry/react/components/form/form.tsx +180 -0
  85. package/data/registry/react/components/form/index.tsx +61 -0
  86. package/data/registry/react/components/form/steps.test.tsx +106 -0
  87. package/data/registry/react/components/form/steps.tsx +193 -0
  88. package/data/registry/react/components/form/store.test.ts +206 -0
  89. package/data/registry/react/components/form/store.ts +318 -0
  90. package/data/registry/react/components/form/styles.css +47 -0
  91. package/data/registry/react/components/form/types.ts +104 -0
  92. package/data/registry/react/components/form/use-sh-ui-form.ts +15 -0
  93. package/data/registry/react/components/form/utils.test.ts +44 -0
  94. package/data/registry/react/components/form/utils.ts +49 -0
  95. package/data/registry/react/components/form/validation.test.ts +67 -0
  96. package/data/registry/react/components/form/validation.ts +64 -0
  97. package/data/registry/react/components/form-rhf/README.md +27 -0
  98. package/data/registry/react/components/form-rhf/index.tsx +289 -0
  99. package/data/registry/react/components/form-rhf/rhf.test.tsx +42 -0
  100. package/data/registry/react/components/form-tanstack/README.md +27 -0
  101. package/data/registry/react/components/form-tanstack/index.tsx +352 -0
  102. package/data/registry/react/components/form-tanstack/tanstack.test.tsx +45 -0
  103. package/data/registry/react/components/form-yup/README.md +22 -0
  104. package/data/registry/react/components/form-yup/index.tsx +50 -0
  105. package/data/registry/react/components/form-yup/yup.test.ts +27 -0
  106. package/data/registry/react/components/header/index.tsx +257 -0
  107. package/data/registry/react/components/header/styles.css +190 -0
  108. package/data/registry/react/components/input/index.tsx +517 -0
  109. package/data/registry/react/components/input/styles.css +203 -0
  110. package/data/registry/react/components/label/index.tsx +54 -0
  111. package/data/registry/react/components/label/styles.css +90 -0
  112. package/data/registry/react/components/menubar/index.tsx +34 -0
  113. package/data/registry/react/components/menubar/styles.css +45 -0
  114. package/data/registry/react/components/pagination/index.tsx +271 -0
  115. package/data/registry/react/components/pagination/styles.css +105 -0
  116. package/data/registry/react/components/popover/index.tsx +115 -0
  117. package/data/registry/react/components/popover/styles.css +65 -0
  118. package/data/registry/react/components/progress/index.tsx +56 -0
  119. package/data/registry/react/components/progress/styles.css +41 -0
  120. package/data/registry/react/components/radio/index.tsx +67 -0
  121. package/data/registry/react/components/radio/styles.css +80 -0
  122. package/data/registry/react/components/select/index.tsx +236 -0
  123. package/data/registry/react/components/select/styles.css +193 -0
  124. package/data/registry/react/components/separator/index.tsx +48 -0
  125. package/data/registry/react/components/separator/styles.css +15 -0
  126. package/data/registry/react/components/sidebar/index.tsx +1084 -0
  127. package/data/registry/react/components/sidebar/styles.css +502 -0
  128. package/data/registry/react/components/skeleton/index.tsx +24 -0
  129. package/data/registry/react/components/skeleton/styles.css +24 -0
  130. package/data/registry/react/components/slider/index.tsx +300 -0
  131. package/data/registry/react/components/slider/styles.css +64 -0
  132. package/data/registry/react/components/spinner/index.tsx +40 -0
  133. package/data/registry/react/components/spinner/styles.css +37 -0
  134. package/data/registry/react/components/switch/index.tsx +41 -0
  135. package/data/registry/react/components/switch/styles.css +83 -0
  136. package/data/registry/react/components/tabs/index.tsx +93 -0
  137. package/data/registry/react/components/tabs/styles.css +148 -0
  138. package/data/registry/react/components/textarea/index.tsx +25 -0
  139. package/data/registry/react/components/textarea/styles.css +54 -0
  140. package/data/registry/react/components/theme/index.tsx +91 -0
  141. package/data/registry/react/components/toast/index.tsx +257 -0
  142. package/data/registry/react/components/toast/styles.css +290 -0
  143. package/data/registry/react/components/toggle/index.tsx +133 -0
  144. package/data/registry/react/components/toggle/styles.css +85 -0
  145. package/data/registry/react/components/tooltip/index.tsx +85 -0
  146. package/data/registry/react/components/tooltip/styles.css +44 -0
  147. package/data/registry/react/components/z-index/z-index.css +16 -0
  148. package/data/registry/react/hooks/use-active-section.ts +104 -0
  149. package/data/registry/react/hooks/use-media-query.ts +27 -0
  150. package/data/registry/react/lib/cn.ts +39 -0
  151. package/data/registry/react/registry.json +835 -0
  152. package/data/summaries/flutter.json +42 -0
  153. package/data/summaries/react.json +50 -0
  154. package/data/tokens/build.mjs +553 -0
  155. package/data/tokens/src/primitives.json +146 -0
  156. package/data/tokens/src/semantic.json +146 -0
  157. package/package.json +13 -4
  158. package/src/add.mjs +13 -12
  159. package/src/list.mjs +3 -11
  160. package/src/mcp.mjs +308 -0
  161. package/src/paths.mjs +52 -0
  162. package/src/remove.mjs +4 -11
package/bin/sh-ui.mjs CHANGED
@@ -13,6 +13,7 @@ const usage = `사용법:
13
13
  특수값: tokens → 설정 기반 토큰 파일 생성
14
14
  sh-ui list 현재 설치된 컴포넌트 목록 표시
15
15
  sh-ui remove <component...> 설치된 컴포넌트 파일 삭제
16
+ sh-ui mcp MCP 서버(stdio) 시작 — IDE-내 AI용
16
17
  옵션:
17
18
  --skip-install (add) 외부 패키지 자동 설치 생략
18
19
  --diff (add) 파일을 쓰지 않고 변경 내역만 출력
@@ -43,6 +44,11 @@ try {
43
44
  await list({ cwd: process.cwd(), all });
44
45
  break;
45
46
  }
47
+ case "mcp": {
48
+ const { startMcpServer } = await import("../src/mcp.mjs");
49
+ await startMcpServer();
50
+ break;
51
+ }
46
52
  case "remove":
47
53
  case "rm": {
48
54
  const force = rest.includes("--force");
@@ -0,0 +1,354 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$description": "sh-ui 릴리즈 노트 단일 소스. docs(React)와 showcase(Flutter)가 함께 읽는다. 새 릴리즈마다 맨 앞에 추가.",
4
+ "versions": [
5
+ {
6
+ "version": "0.21.0",
7
+ "date": "2026-04-27",
8
+ "title": "MCP 서버 + standalone CLI — AI 친화 세팅",
9
+ "type": "minor",
10
+ "highlights": [
11
+ "sh-ui mcp 서브커맨드 — IDE-내 AI(Claude Code, Cursor 등)가 stdio MCP 로 컴포넌트 검색·설치·삭제. 등록 한 줄(`npx -y sh-ui-cli mcp`)로 AI 가 sh-ui 를 자동 인지",
12
+ "MCP 툴 7개 — describe_init / init / list_components / get_component / add_component / remove_component / get_changelog. 자연어 의도(\"다크 모던\")를 enum 값으로 매핑하는 describe_init 포함",
13
+ "출고 모드 데이터 번들 — 그동안 `npx sh-ui-cli`가 모노레포 밖에서 동작하지 않던 문제 수정. prepublishOnly 가 registry/tokens/summaries/versions 를 패키지에 포함",
14
+ "paths.mjs 헬퍼 — 모노레포·출고 모드 자동 감지로 add/list/remove 가 양쪽에서 동일하게 동작"
15
+ ],
16
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.21.0"
17
+ },
18
+ {
19
+ "version": "0.20.1",
20
+ "date": "2026-04-27",
21
+ "title": "TSDoc·dartdoc 보강 — IDE 호버 안내 강화",
22
+ "type": "patch",
23
+ "highlights": [
24
+ "React 24개 컴포넌트의 prop·옵션별 한글 TSDoc 추가 — IDE 호버에서 variant/size/orientation 등 enum 옵션별 의미가 즉시 표시",
25
+ "Flutter 4개 위젯(button·header·sidebar·app_shell)의 클래스·필드 dartdoc 보강 — `[paramName]` 참조와 옵션 설명 정리",
26
+ "isValidBRN·getPaginationRange·yupSchema 등 유틸 함수에 @param·@returns·@example 추가 — 자동완성 시그니처 헬프에서 인자 의미 안내",
27
+ "런타임 동작 변경 없음 (docs only). registry와 docs/showcase 듀얼 카피 동기화"
28
+ ],
29
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.20.1"
30
+ },
31
+ {
32
+ "version": "0.20.0",
33
+ "date": "2026-04-23",
34
+ "title": "Form 기본 레이아웃 + 루트 컴포넌트 style/className 개방",
35
+ "type": "minor",
36
+ "highlights": [
37
+ "Form · Form.Section · Form.Field 에 기본 세로 flex 레이아웃 적용 — 수동 margin 없이 토큰 간격(--space-4, --space-1)으로 자동 정렬",
38
+ "Form.Field / Form.Error 가 HTMLAttributes 를 그대로 수용 — <Form.Field style={{ gap: \"0.5rem\" }}> · className=\"gap-2\" 같이 네이티브 CSS 경로로 직접 덮어쓰기",
39
+ "CodePanel · CodePanel.Body · ColorPicker 루트가 HTMLAttributes 확장 — style · className · data-* 로 바로 오버라이드 가능",
40
+ "FileUpload 루트 래퍼에 style prop 추가 (ref 는 기존대로 input 유지)",
41
+ "CSS 변수 API 최소화 원칙 — 컴포넌트별 간격 변수는 노출하지 않고 style/className/외부 CSS 로 일관"
42
+ ],
43
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.20.0"
44
+ },
45
+ {
46
+ "version": "0.19.1",
47
+ "date": "2026-04-23",
48
+ "title": "Form 타입 정밀화 + placeholder 색 완화 + 문서 확장",
49
+ "type": "patch",
50
+ "highlights": [
51
+ "Zod v4 호환 — StandardSchemaV1.path 에 PathSegment 객체 형태 허용, schema 캐스트 없이 Form schema/useShUiForm schema 에 직접 전달",
52
+ "TanStack Form 어댑터 — adaptTanStackForm 이 useForm 반환을 캐스트 없이 수용 (ReactFormExtendedApi 의 12개 제네릭 중 TFormData 만 추론 유지)",
53
+ "placeholder 색 완화 — Input·Textarea·Select·Combobox·DatePicker 에서 --foreground-muted → --foreground-subtle 로 입력값과 명도 차이 확대",
54
+ "Form 문서 대폭 확장 — 데모 9종 추가 (useShUiForm·Zod·TanStack·Yup·async validate·서버 에러·교차 필드·checked 바인딩·custom render), 사용 모드 비교·검증·API 레퍼런스 섹션 정리"
55
+ ],
56
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.19.1"
57
+ },
58
+ {
59
+ "version": "0.19.0",
60
+ "date": "2026-04-23",
61
+ "title": "Form 컴포넌트 — 라이브러리 비종속 + 멀티스텝·섹션 1급",
62
+ "type": "minor",
63
+ "highlights": [
64
+ "Form + Form.Field / Section / Steps / Step — compound API 로 멀티스텝·멀티섹션 폼 지원 (값은 스텝 이동에도 보존)",
65
+ "3가지 사용 모드 (네이티브 / useShUiForm / RHF·TanStack·Yup 어댑터) 를 FormStore 인터페이스로 통일",
66
+ "재사용 블록은 Form 루트 없이 Section 패턴으로 이식 가능 — AddressFields 스타일 권장",
67
+ "Standard Schema 표준 채택 (Zod v3.24+/Valibot/Arktype 네이티브, Yup 은 form-yup 래퍼)"
68
+ ],
69
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.19.0"
70
+ },
71
+ {
72
+ "version": "0.18.1",
73
+ "date": "2026-04-22",
74
+ "title": "sh-ui-create — 입력 하드닝",
75
+ "type": "patch",
76
+ "highlights": [
77
+ "--theme base64 입력에 10KB 상한 추가 — 큰 악성 입력을 JSON 파싱 전에 명확한 에러로 거부",
78
+ "플레이그라운드 Dialog 의 프로젝트 이름 검증 — 영문·숫자·'-'·'_' 만 허용, 첫 글자 영문/숫자. 잘못되면 에러 메시지 + 복사 버튼 비활성화",
79
+ "UX: 잘못된 이름으로 생성된 명령어를 터미널에 붙여넣는 사고 방지"
80
+ ],
81
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.18.1"
82
+ },
83
+ {
84
+ "version": "0.18.0",
85
+ "date": "2026-04-22",
86
+ "title": "sh-ui-create — 비대화형 플래그와 theme 주입",
87
+ "type": "minor",
88
+ "highlights": [
89
+ "--platform / --structure / --plugins / --theme / --yes 플래그 지원 — 완전 비대화형 실행 가능",
90
+ "--theme <base64> 로 커스텀 색·radius 를 프로젝트 생성 시점에 바로 주입 (플레이그라운드 연동 준비)",
91
+ "템플릿의 tokens.css / sh_ui_tokens.dart 에 theme 섹션 마커 삽입 — 토큰만 교체되고 다른 값(spacing 등)은 유지"
92
+ ],
93
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.18.0"
94
+ },
95
+ {
96
+ "version": "0.17.0",
97
+ "date": "2026-04-21",
98
+ "title": "sh-ui-create — Flutter 스타터 지원",
99
+ "type": "minor",
100
+ "highlights": [
101
+ "sh-ui-create — 프로젝트 생성 시 플랫폼 선택(Next.js / Flutter) 신규",
102
+ "Flutter 선택 시 pubspec + main.dart + sh-ui.config.json + 토큰 복사본까지 완성된 스타터 제공",
103
+ "생성 직후 `flutter run`으로 테마 적용된 초기 화면 확인, 이어서 `sh-ui add <widget>` 로 위젯 추가"
104
+ ],
105
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.17.0"
106
+ },
107
+ {
108
+ "version": "0.16.0",
109
+ "date": "2026-04-21",
110
+ "title": "sh-ui-create — 프로젝트 스캐폴드 CLI",
111
+ "type": "minor",
112
+ "highlights": [
113
+ "sh-ui-create 신규 패키지 — npx sh-ui-create 로 sh-ui 가 사전 설정된 Next.js 프로젝트 스캐폴드",
114
+ "단독 / 모노레포(Turborepo + pnpm workspace) 템플릿 — FSD 폴더 구조 + sh-ui.config.json + tokens.css 선반영",
115
+ "Sentry / next-intl 플러그인 — 체크박스 선택으로 파일·의존성·next.config 래핑 자동 구성",
116
+ "add-app / add-component 보조 명령 — 모노레포 앱 추가, 앱별 ui 패키지에 sh-ui add 위임",
117
+ "docs: /create 페이지 추가 — 전체 레퍼런스 + 단독 vs 모노레포 구조 비교 + FSD 레이어 규칙"
118
+ ],
119
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.16.0"
120
+ },
121
+ {
122
+ "version": "0.15.1",
123
+ "date": "2026-04-21",
124
+ "title": "ColorPicker — StrictMode 렌더 중 부모 setState 경고 수정",
125
+ "type": "patch",
126
+ "highlights": [
127
+ "setHsv 업데이터 콜백 내부에서 onChange를 호출하던 부작용을 업데이터 밖으로 이동",
128
+ "React StrictMode가 updater를 두 번 invoke할 때 발생하던 'setState while rendering' 경고 제거",
129
+ "controlled 모드에서 부모 상태를 동기화하는 시나리오(예: playground 토큰 에디터) 안정성 개선"
130
+ ],
131
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.15.1"
132
+ },
133
+ {
134
+ "version": "0.15.0",
135
+ "date": "2026-04-21",
136
+ "title": "llms.txt — AI 도구용 컴포넌트 인벤토리",
137
+ "type": "minor",
138
+ "highlights": [
139
+ "apps/docs/public/llms.txt — 전 컴포넌트 한 줄 요약 + 설치 플로우 + 관용 규칙 (llms.txt 표준 따름)",
140
+ "apps/docs/public/llms-full.txt — 각 컴포넌트별 설치 커맨드/import 경로/의존성 + 최근 릴리즈 5개",
141
+ "packages/llms 신규 워크스페이스 — registry.json + summaries/*.json을 읽어 자동 생성. next build 훅에 연결",
142
+ "pnpm gen:llms — 루트 스크립트로 수동 재생성 가능"
143
+ ],
144
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.15.0"
145
+ },
146
+ {
147
+ "version": "0.14.0",
148
+ "date": "2026-04-20",
149
+ "title": "Pagination — 페이지 단위 내비게이션 컴포넌트",
150
+ "type": "minor",
151
+ "highlights": [
152
+ "React: Pagination / PaginationContent / Item / Link / Previous / Next / Ellipsis 컴파운드 구성 — Breadcrumb와 동일한 관용",
153
+ "getPaginationRange({page, totalPages, siblings}) 유틸 — 현재 페이지 주변 + 양 끝 + 생략(…) 토큰 배열 생성",
154
+ "Flutter: ShUiPagination(page:, pageCount:, siblingCount:, onPageChanged:) — 페이지 범위 계산 내장",
155
+ "nav + ol/ul 시맨틱, 현재 페이지 aria-current=\"page\", 이전/다음 aria-label 자동 부여"
156
+ ],
157
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.14.0"
158
+ },
159
+ {
160
+ "version": "0.13.1",
161
+ "date": "2026-04-20",
162
+ "title": "토큰 대비 감사 — WCAG AA 통과",
163
+ "type": "patch",
164
+ "highlights": [
165
+ "light mode foreground-muted를 base.500 → base.600로 (muted 텍스트 on muted background 4.35:1 → 7.17:1)",
166
+ "light mode danger를 red.500 → red.600로 통일 (danger 버튼 3.76:1 → 4.83:1)",
167
+ "감사 스크립트 추가: pnpm --filter @sh-ui/tokens audit:contrast — 3 base × 2 mode 조합 일괄 검증",
168
+ "주의: 기존 설치자는 sh-ui add tokens로 tokens.css 재생성 필요"
169
+ ],
170
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.13.1"
171
+ },
172
+ {
173
+ "version": "0.13.0",
174
+ "date": "2026-04-20",
175
+ "title": "CLI list / remove — 설치 관리 사이클 완결",
176
+ "type": "minor",
177
+ "highlights": [
178
+ "sh-ui list — 설치된 컴포넌트 목록 (--all로 레지스트리 전체)",
179
+ "sh-ui remove <name...> — 설치 파일 삭제, 빈 폴더 자동 정리",
180
+ "사용자 수정 파일은 기본 보호, --force로만 강제 삭제. --dry-run 미리보기 지원"
181
+ ],
182
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.13.0"
183
+ },
184
+ {
185
+ "version": "0.12.0",
186
+ "date": "2026-04-20",
187
+ "title": "CLI --diff 플래그 — 업데이트 미리보기",
188
+ "type": "minor",
189
+ "highlights": [
190
+ "sh-ui add <name> --diff — 파일을 쓰지 않고 변경 내역(unified diff)만 출력",
191
+ "신규/변경/동일 파일을 분류해 요약, 수정해둔 파일이 있는지 사전 확인 가능",
192
+ "의존성 없는 LCS 기반 line-diff 내장 (packages/cli/src/diff.mjs)"
193
+ ],
194
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.12.0"
195
+ },
196
+ {
197
+ "version": "0.11.0",
198
+ "date": "2026-04-20",
199
+ "title": "Progress / Spinner / Separator — 기본 원자 3종",
200
+ "type": "minor",
201
+ "highlights": [
202
+ "신규: Progress (determinate + indeterminate) — React / Flutter 양쪽",
203
+ "신규: Spinner (sm/md/lg) — aria-live 로딩 상태 노출",
204
+ "신규: Separator (horizontal/vertical) — 기본 decorative, 필요 시 role=separator"
205
+ ],
206
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.11.0"
207
+ },
208
+ {
209
+ "version": "0.10.0",
210
+ "date": "2026-04-20",
211
+ "title": "Flutter 파리티 라운드 — 최근 7종 위젯 추가",
212
+ "type": "minor",
213
+ "highlights": [
214
+ "신규: ShUiDropdownMenu (PopupMenuButton 기반)",
215
+ "신규: ShUiContextMenu (우클릭 + long-press)",
216
+ "신규: ShUiMenubar (가로 메뉴바)",
217
+ "신규: ShUiTooltip (Flutter Tooltip 래핑)",
218
+ "신규: ShUiBreadcrumb (items 리스트)",
219
+ "신규: ShUiAvatar (이미지 + fallback, 4사이즈)",
220
+ "신규: ShUiBadge (6 variant × 2 size)"
221
+ ],
222
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.10.0"
223
+ },
224
+ {
225
+ "version": "0.9.0",
226
+ "date": "2026-04-20",
227
+ "title": "Menu 계열 완결 + Tooltip/Breadcrumb/Avatar/Badge",
228
+ "type": "minor",
229
+ "highlights": [
230
+ "신규: ContextMenu (우클릭/long-press)",
231
+ "신규: Menubar (상단 가로 메뉴바, DropdownMenu 재사용)",
232
+ "신규: Tooltip (hover/focus, Provider로 delay 공유)",
233
+ "신규: Breadcrumb (nav + ol 시맨틱 compound)",
234
+ "신규: Avatar (이미지 + 이니셜 fallback, 4사이즈)",
235
+ "신규: Badge (6 variant × 2 size)"
236
+ ],
237
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.9.0"
238
+ },
239
+ {
240
+ "version": "0.8.0",
241
+ "date": "2026-04-20",
242
+ "title": "DropdownMenu 신규",
243
+ "type": "minor",
244
+ "highlights": [
245
+ "신규: DropdownMenu (Base UI Menu 기반 compound)",
246
+ "체크박스·라디오·서브메뉴·구분선 지원",
247
+ "키보드 네비게이션 기본 제공 (↑↓, Enter, →/←, Home/End, Esc, type-ahead)"
248
+ ],
249
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.8.0"
250
+ },
251
+ {
252
+ "version": "0.7.1",
253
+ "date": "2026-04-19",
254
+ "title": "접근성 감사 라운드 1",
255
+ "type": "patch",
256
+ "highlights": [
257
+ "원자 8종(Button/Toggle/Radio/Checkbox/Dialog/Popover/Sidebar/Toast)에 reduced-motion 블록 추가",
258
+ "Carousel autoPlay: 키보드 focus 시 일시정지 (WCAG 2.2.2)"
259
+ ],
260
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.7.1"
261
+ },
262
+ {
263
+ "version": "0.7.0",
264
+ "date": "2026-04-19",
265
+ "title": "Slider / CodePanel compound 전환",
266
+ "type": "minor",
267
+ "highlights": [
268
+ "Slider: SliderTrack / SliderRange / SliderThumb + useSliderState",
269
+ "CodePanel: CodePanelHeader / Filename / Copy / Body",
270
+ "기존 prop API 호환 유지"
271
+ ],
272
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.7.0"
273
+ },
274
+ {
275
+ "version": "0.6.0",
276
+ "date": "2026-04-19",
277
+ "title": "Header + Compound 리팩터",
278
+ "type": "minor",
279
+ "highlights": [
280
+ "신규: Header (Flutter prop-based + React compound)",
281
+ "Carousel / Input / FileUpload / ColorPicker / DatePicker compound 전환"
282
+ ],
283
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.6.0"
284
+ },
285
+ {
286
+ "version": "0.5.0",
287
+ "date": "2026-04-19",
288
+ "title": "Flutter 파리티 v1",
289
+ "type": "minor",
290
+ "highlights": [
291
+ "Flutter 위젯 대량 추가 + API 확장 + multi-select 지원",
292
+ "ShUiAppShell 고수준 레이아웃 + Sidebar 개선"
293
+ ],
294
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.5.0"
295
+ },
296
+ {
297
+ "version": "0.4.0",
298
+ "date": "2026-04-19",
299
+ "title": "디자인 토큰 v2 + Flutter 쇼케이스",
300
+ "type": "minor",
301
+ "highlights": [
302
+ "디자인 토큰 v2 (primitives / semantic 분리)",
303
+ "Flutter 쇼케이스 앱 + pnpm 실행 스크립트",
304
+ "테마 커스터마이징 가이드 페이지"
305
+ ],
306
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.4.0"
307
+ },
308
+ {
309
+ "version": "0.3.1",
310
+ "date": "2026-04-17",
311
+ "title": "Input prefix / Select className 타입 수정",
312
+ "type": "patch",
313
+ "highlights": [
314
+ "Input prefix 타입 충돌 해결",
315
+ "Select className 타입 에러 수정"
316
+ ],
317
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.3.1"
318
+ },
319
+ {
320
+ "version": "0.3.0",
321
+ "date": "2026-04-17",
322
+ "title": "컴포넌트 레지스트리 정리",
323
+ "type": "minor",
324
+ "highlights": [
325
+ "사이드바 네비게이션 정렬",
326
+ "신규 컴포넌트 레지스트리 등록"
327
+ ],
328
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.3.0"
329
+ },
330
+ {
331
+ "version": "0.2.0",
332
+ "date": "2026-04-17",
333
+ "title": "컴포넌트 확장 + 문서 강화 + 모바일 안정화",
334
+ "type": "minor",
335
+ "highlights": [
336
+ "컴포넌트 라인업 확장 (Tabs / Popover / Dialog / Combobox / Label / base.css)",
337
+ "Sidebar 보조 패널·Popover flyout·접근성 개선",
338
+ "모바일 레이아웃 안정화"
339
+ ],
340
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.2.0"
341
+ },
342
+ {
343
+ "version": "0.1.0",
344
+ "date": "2026-04-15",
345
+ "title": "sh-ui 초기 릴리스",
346
+ "type": "minor",
347
+ "highlights": [
348
+ "초기 컴포넌트 셋 + CLI 스캐폴딩",
349
+ "React/Flutter 듀얼 레지스트리 구조"
350
+ ],
351
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.1.0"
352
+ }
353
+ ]
354
+ }