sh-ui-cli 0.64.3 → 0.64.5
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.
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$description": "sh-ui 릴리즈 노트 단일 소스. docs(React)와 showcase(Flutter)가 함께 읽는다. 새 릴리즈마다 맨 앞에 추가.",
|
|
4
4
|
"versions": [
|
|
5
|
+
{
|
|
6
|
+
"version": "0.64.5",
|
|
7
|
+
"date": "2026-05-08",
|
|
8
|
+
"title": "patch — registry drift 가드 (CI lint 3종) + form/calendar summary 추가",
|
|
9
|
+
"type": "patch",
|
|
10
|
+
"highlights": [
|
|
11
|
+
"**CI lint 3종 추가** — `scripts/lint-registry.mjs` (B: registry.json ↔ summary key 매칭, C: summary 텍스트의 PascalCase 식별자가 실제 export 에 있는지 휴리스틱 검증) + `scripts/lint-dual-copy.mjs` (A: registry/<plat>/components/<name>/ ↔ apps/docs/components/ui/<name>/ drift 검출). PR/push 마다 `pnpm lint:drift` 가 ci.yml 에서 자동 실행. v0.64.0~0.64.4 audit 의 13건 React + 16건 Flutter 잘못 가 같은 종류였고, 앞으로는 컴포넌트 추가/변경 시 동기화 빠뜨리는 걸 자동으로 막는다.",
|
|
12
|
+
"**baseline 기반 가드** — 듀얼카피 lint 는 도입 시점의 알려진 drift 10건은 BASELINE_DRIFTS 로 통과시키고, **새 drift 만 fail**. 기존 drift 는 별도 cleanup PR 에서 점진 해소. baseline 항목 fix 후 BASELINE_DRIFTS 에서 제거하는 흐름을 알리는 stale warning 도 포함.",
|
|
13
|
+
"**form / form-yup / form-rhf / form-tanstack / calendar summary 추가** — 그동안 generate.mjs 가 'summary 누락' 경고만 띄우던 5개 컴포넌트 채움. `sh_ui_list_components` 결과에서 빈 summary 였던 부분이 이제 실제 사용법 노출."
|
|
14
|
+
],
|
|
15
|
+
"url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.64.5"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"version": "0.64.4",
|
|
19
|
+
"date": "2026-05-08",
|
|
20
|
+
"title": "patch — Flutter summary 16건 정확성 audit",
|
|
21
|
+
"type": "patch",
|
|
22
|
+
"highlights": [
|
|
23
|
+
"**사실관계 정정 6건** — `card`/`dialog` 의 'header/body/footer named slot' (실제는 separate widget, Body 가 아니라 Content), `dialog` 의 'showDialog 로 호출' (실제는 `ShUiDialog.show<T>()` static, Flutter 빌트인 `showDialog` 와 다름), `checkbox` 의 'tristate' (실제 prop 은 `indeterminate`), `toast` 의 'ShUiToastOverlay' (실재 X — `ShUiToaster` + `ShUiToast.show()`), `tabs` 의 'ShUiTabsController' (실재 X — `ShUiTabs` + `ShUiTab` 데이터).",
|
|
24
|
+
"**exports 명시 보강 10건** — select/combobox 의 Multi 변종 (`ShUiMultiSelect<T>`, `ShUiMultiCombobox<T>`), date-picker 의 `ShUiDateRangePicker`, dropdown-menu 의 sealed `ShUiDropdownMenuEntry<T>` 자식들 (Item / CheckboxItem / RadioItem / Divider / Label), menubar 의 `ShUiMenubarMenu`, sidebar 의 Provider/Trigger/Header/Footer/Inset + `.of(ctx)` 패턴, app-shell 의 `ShUiAppShellGroup`/`Item`, header 의 `ShUiHeaderItem`, breadcrumb 의 `ShUiBreadcrumbItem`, popover 의 Title/Description, checkbox 의 `ShUiCheckboxGroup`. v0.64.1·v0.64.2 의 React audit 과 동일 톤으로 통일.",
|
|
25
|
+
"**MCP 양 플랫폼 정보 일관성 마무리** — React (v0.64.1·v0.64.2·v0.64.3) + Flutter (이번) 모두 source-of-truth 정확도 확보. AI 가 sh-ui MCP 로 컴포넌트 요청 시 환각으로 잘못된 위젯명·prop·호출 패턴을 만들어 내던 실패 모드 해소."
|
|
26
|
+
],
|
|
27
|
+
"url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.64.4"
|
|
28
|
+
},
|
|
5
29
|
{
|
|
6
30
|
"version": "0.64.3",
|
|
7
31
|
"date": "2026-05-08",
|
|
@@ -3,34 +3,34 @@
|
|
|
3
3
|
"summaries": {
|
|
4
4
|
"tokens": "ShUiTheme (ThemeExtension) — 색상/간격/타이포/반경/지속시간 토큰. Theme.of(ctx).extension<ShUiTheme>()로 접근.",
|
|
5
5
|
"button": "ShUiButton — variant(primary/secondary/ghost/danger/link) + size(sm/md/lg).",
|
|
6
|
-
"card": "ShUiCard —
|
|
6
|
+
"card": "ShUiCard — separate widgets: ShUiCard / ShUiCardHeader / ShUiCardTitle / ShUiCardDescription / ShUiCardContent / ShUiCardFooter (named slot 아님, Body 가 아니라 Content).",
|
|
7
7
|
"input": "ShUiInput — TextField 래퍼 + sh-ui 토큰 스타일.",
|
|
8
8
|
"textarea": "ShUiTextarea — 다중 행 입력.",
|
|
9
9
|
"label": "ShUiLabel — 폼 레이블.",
|
|
10
|
-
"checkbox": "ShUiCheckbox — tristate
|
|
10
|
+
"checkbox": "ShUiCheckbox / ShUiCheckboxGroup — `indeterminate` prop 으로 중간 상태 (Material 의 `tristate` 아님).",
|
|
11
11
|
"radio": "ShUiRadio / ShUiRadioGroup — 단일 선택.",
|
|
12
12
|
"switch": "ShUiSwitch — 토글 스위치.",
|
|
13
13
|
"toggle": "ShUiToggle — 프레스 상태 유지 버튼.",
|
|
14
14
|
"slider": "ShUiSlider — 단일 값, step.",
|
|
15
|
-
"select": "ShUiSelect
|
|
16
|
-
"combobox": "ShUiCombobox — 검색 가능 셀렉트.",
|
|
17
|
-
"date-picker": "ShUiDatePicker — 캘린더 팝업.",
|
|
15
|
+
"select": "ShUiSelect<T> + ShUiSelectItem<T> / ShUiSelectGroup / ShUiSelectSeparator (모두 ShUiSelectElement). 다중 선택은 ShUiMultiSelect<T>.",
|
|
16
|
+
"combobox": "ShUiCombobox<T> + ShUiComboboxItem<T> — 검색 가능 셀렉트. 다중 선택은 ShUiMultiCombobox<T>.",
|
|
17
|
+
"date-picker": "ShUiDatePicker (단일) + ShUiDateRangePicker (범위) — 캘린더 팝업.",
|
|
18
18
|
"color-picker": "ShUiColorPicker — 색상 선택.",
|
|
19
19
|
"file-upload": "ShUiFileUpload — 파일 선택/드롭.",
|
|
20
|
-
"dialog": "ShUiDialog
|
|
21
|
-
"popover": "ShUiPopover — 트리거 기준 오버레이.",
|
|
20
|
+
"dialog": "ShUiDialog + ShUiDialogTrigger / ShUiDialogContent / ShUiDialogHeader 분리 위젯. 명령형 호출은 `ShUiDialog.show<T>(...)` static (Flutter 빌트인 `showDialog` 아님).",
|
|
21
|
+
"popover": "ShUiPopover + ShUiPopoverTitle / ShUiPopoverDescription — 트리거 기준 오버레이.",
|
|
22
22
|
"tooltip": "ShUiTooltip — long-press / hover 힌트.",
|
|
23
|
-
"toast": "
|
|
24
|
-
"dropdown-menu": "ShUiDropdownMenu
|
|
23
|
+
"toast": "임시 알림 — `ShUiToast.show(ctx, ...)` static (또는 `.success` / `.danger` / `.warning`) + `ShUiToaster` 위젯 (앱 루트에 배치, 스택 관리). `ShUiToastOverlay` 클래스 아님.",
|
|
24
|
+
"dropdown-menu": "ShUiDropdownMenu<T> + ShUiDropdownMenuItem<T> / ShUiDropdownMenuCheckboxItem<T> / ShUiDropdownMenuRadioItem<T> / ShUiDropdownMenuDivider<T> / ShUiDropdownMenuLabel<T> (모두 ShUiDropdownMenuEntry<T> 의 sealed 자식).",
|
|
25
25
|
"context-menu": "ShUiContextMenu — 길게 누르기/우클릭 메뉴.",
|
|
26
|
-
"menubar": "ShUiMenubar — 수평
|
|
27
|
-
"tabs": "ShUiTabs
|
|
26
|
+
"menubar": "ShUiMenubar + ShUiMenubarMenu — 수평 메뉴바, 각 ShUiMenubarMenu 가 하나의 드롭다운.",
|
|
27
|
+
"tabs": "ShUiTabs + ShUiTab (data class) — 탭 내비. `ShUiTabsController` 클래스 아님.",
|
|
28
28
|
"accordion": "ShUiAccordion — 펼침/접힘. single/multiple.",
|
|
29
29
|
"carousel": "ShUiCarousel — PageView 기반, autoplay/dots.",
|
|
30
|
-
"sidebar": "ShUiSidebar
|
|
31
|
-
"app-shell": "ShUiAppShell — 사이드바 + 상단 바 + 본문 레이아웃.",
|
|
32
|
-
"header": "ShUiHeader — 로고/네비/액션 영역.",
|
|
33
|
-
"breadcrumb": "ShUiBreadcrumb(items: [...]) — items 기반 경로 내비.",
|
|
30
|
+
"sidebar": "ShUiSidebar + ShUiSidebarProvider (앱 루트, 접힘 상태 보유) / ShUiSidebarTrigger / ShUiSidebarHeader / ShUiSidebarFooter / ShUiSidebarInset (본문 영역). 자식에서 상태 접근은 `ShUiSidebar.of(context)`.",
|
|
31
|
+
"app-shell": "ShUiAppShell — 사이드바 + 상단 바 + 본문 레이아웃. nav 항목은 `ShUiAppShellItem` (label/icon/route 등) 을 `ShUiAppShellGroup` 에 묶어 전달.",
|
|
32
|
+
"header": "ShUiHeader — 로고/네비/액션 영역. nav 항목은 `ShUiHeaderItem` (label/route/onTap 등) 을 items 에 전달.",
|
|
33
|
+
"breadcrumb": "ShUiBreadcrumb(items: [...]) — items 기반 경로 내비. items 원소는 `ShUiBreadcrumbItem` 위젯.",
|
|
34
34
|
"pagination": "ShUiPagination(page:, pageCount:, siblingCount:, onPageChanged:) — 페이지 범위 계산 내장.",
|
|
35
35
|
"avatar": "ShUiAvatar — 이미지/initials fallback.",
|
|
36
36
|
"badge": "ShUiBadge — 상태 뱃지.",
|
|
@@ -50,6 +50,11 @@
|
|
|
50
50
|
"animations": "공용 애니메이션 키프레임 — animations.css.",
|
|
51
51
|
"cn": "className 합성 헬퍼. plain 변종(`cn.ts`)은 순수 concat, tailwind 변종(`cn.tailwind.ts`)은 clsx + tailwind-merge 로 utility 충돌 자동 머지 (`cn('bg-red-500', 'bg-blue-500')` → `'bg-blue-500'`).",
|
|
52
52
|
"use-media-query": "미디어 쿼리 매칭 훅.",
|
|
53
|
-
"use-active-section": "스크롤 위치로 현재 섹션 감지 훅."
|
|
53
|
+
"use-active-section": "스크롤 위치로 현재 섹션 감지 훅.",
|
|
54
|
+
"form": "compound 폼 빌더 — `Form` (Form.Field / Form.Label / Form.Description / Form.Error / Form.Control / Form.Section / Form.SectionTitle / Form.Steps / Form.Step) + useShUiForm 훅 + createFormStore + useFormSteps. 검증은 Standard Schema (yup/zod 등) 또는 inline 함수로 부착. 외부 form 라이브러리 어댑터는 form-rhf / form-tanstack / form-yup 별도 entry.",
|
|
55
|
+
"form-yup": "yup 스키마 → sh-ui Form 의 Standard Schema 어댑터. `yupSchema(yupObject)` 로 감싸 Form 의 `validation` prop 에 전달. yup 자체는 peerDependency.",
|
|
56
|
+
"form-rhf": "React Hook Form 인스턴스 → sh-ui FormStore 어댑터. `adaptReactHookForm(rhfInstance, config)` — RHF 가 state owner, sh-ui 가 메타(steps/sections) 관리. react-hook-form 은 peerDependency.",
|
|
57
|
+
"form-tanstack": "TanStack Form 인스턴스 → sh-ui FormStore 어댑터. `adaptTanstackForm(tanstackInstance, config)` — TanStack Form 이 state owner. @tanstack/react-form 은 peerDependency.",
|
|
58
|
+
"calendar": "내부 캘린더 위젯 (DatePicker 가 사용). single / multiple / range 모드. CalendarMessages 로 a11y 텍스트 override. 일반적으로 직접 사용보다 DatePicker / DateRangePicker 권장."
|
|
54
59
|
}
|
|
55
60
|
}
|