diff --git a/.changeset/pre.json b/.changeset/pre.json index bdb2e379a..f4c2f6b8d 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -70,6 +70,14 @@ }, "changesets": [ "add-lynx-framework-support", - "lynx-alpha-release" + "lynx-alpha-release", + "lynx-bottom-sheet-deps", + "lynx-bottom-sheet", + "lynx-css-qvism-split", + "lynx-react-utils-refactor", + "lynx-react-utils", + "lynx-switch", + "lynx-tag-group", + "prune-stale-lynx-css-artifacts" ] } diff --git a/bun.lock b/bun.lock index 7f9a5a07f..72b6cda78 100644 --- a/bun.lock +++ b/bun.lock @@ -456,7 +456,7 @@ }, "packages/lynx-css": { "name": "@seed-design/lynx-css", - "version": "0.1.1-alpha.0", + "version": "0.1.1-alpha.1", "devDependencies": { "@seed-design/qvism-cli": "0.0.0", "@seed-design/qvism-preset": "0.0.0", @@ -476,7 +476,7 @@ }, "packages/lynx-react": { "name": "@seed-design/lynx-react", - "version": "0.1.1-alpha.0", + "version": "0.2.0-alpha.1", "dependencies": { "@lynx-js/lynx-ui-common": "^3.130.0", "@lynx-js/lynx-ui-sheet": "^3.130.1", diff --git a/packages/lynx-css/CHANGELOG.md b/packages/lynx-css/CHANGELOG.md index 84c74076c..92e2498c6 100644 --- a/packages/lynx-css/CHANGELOG.md +++ b/packages/lynx-css/CHANGELOG.md @@ -1,5 +1,17 @@ # @seed-design/lynx-css +## 0.1.1-alpha.1 + +### Patch Changes + +- 4d9b05c: Regenerate Lynx CSS after qvism preset web/Lynx split. `packages/lynx-css` now uses its own `qvism.config.mjs` driven by the dedicated Lynx preset entry (`@seed-design/qvism-preset/lynx`), and no longer depends on the removed `targets` mechanism in `qvism-core`. +- 70054ea: TagGroup 컴포넌트 추가 + qvism preset 웹/Lynx 분리 + + - `@seed-design/lynx-react`: `TagGroupRoot`, `TagGroupItem`, `TagGroupItemLabel` 지원. Root에서 `size`/`weight`/`tone`을 Context로 Item에 전파, children 사이에 separator 자동 삽입 (기본 `" · "`, `separator` prop으로 커스텀 가능). 웹 대비 `` → ``/`` 렌더, `flexShrink`·`asChild`·아이콘 slot 미지원. + - `@seed-design/lynx-css`: qvism preset이 `@seed-design/qvism-preset` (웹) 과 `@seed-design/qvism-preset/lynx` (Lynx) 로 완전 분리됨. Lynx preset은 `@lynx-js/types`의 `CSSProperties` 타입으로 recipe 작성 시 미지원 property를 컴파일 타임에 차단. TagGroup recipe를 Lynx flex row 기반으로 재작성. + +- ffc6d4f: 등록되지 않은 컴포넌트의 CSS 산출물을 정리했어요. recipes-lynx.ts에 등록된 recipe만 lynx-css 패키지에 남도록 orphan 파일 330개를 제거했습니다. + ## 0.1.1-alpha.0 ### Patch Changes diff --git a/packages/lynx-css/package.json b/packages/lynx-css/package.json index 4e84981fc..8a51aed87 100644 --- a/packages/lynx-css/package.json +++ b/packages/lynx-css/package.json @@ -1,6 +1,6 @@ { "name": "@seed-design/lynx-css", - "version": "0.1.1-alpha.0", + "version": "0.1.1-alpha.1", "repository": { "type": "git", "url": "git+https://github.com/daangn/seed-design.git", diff --git a/packages/lynx-react/CHANGELOG.md b/packages/lynx-react/CHANGELOG.md index bb771f926..264569dba 100644 --- a/packages/lynx-react/CHANGELOG.md +++ b/packages/lynx-react/CHANGELOG.md @@ -1,5 +1,66 @@ # @seed-design/lynx-react +## 0.2.0-alpha.1 + +### Minor Changes + +- d0ea7fe: `BottomSheet` 컴포넌트 추가 (`@lynx-js/lynx-ui-sheet` 래핑) + + - 공개 컴포넌트: `BottomSheetRoot`, `BottomSheetTrigger`, `BottomSheetBackdrop`, `BottomSheetContent`, `BottomSheetHandle`, `BottomSheetHeader`, `BottomSheetTitle`, `BottomSheetDescription`, `BottomSheetBody`, `BottomSheetFooter` + - 공개 API는 웹과 동일하게 `open`/`defaultOpen`/`onOpenChange`를 노출하고 내부에서 lynx-ui-sheet의 `show`/`defaultShow`/`onShowChange`로 매핑 + - `createSlotRecipeContext` 유틸을 Lynx 버전으로 포팅해 `packages/lynx-react/src/utils/create-slot-recipe-context.tsx` 신규 — 이후 복합 슬롯 컴포넌트의 공통 기반 + - `BottomSheetCloseButton`은 Tier B로 분리 (SVG 지원 후 추가 예정) + - `lazyMount`/`unmountOnExit`는 미지원 — `forceMount`로 대체 + - `@lynx-js/lynx-ui-sheet` peerDependency 추가 + +- 2194ead: `@seed-design/lynx-react` 내부 구조 정리 + 런타임 버그 수정 + + **Public API 변경 (Breaking)** + + - `createRecipeContext` export 제거 — 내부 실사용 0건. 단일 slot 컴포넌트 포팅 시 필요하면 재도입. + - `createCompoundContext` export 제거 — Switch 단독 사용이라 inline `React.createContext + null-check throw` 패턴으로 교체. lynx-ui 의 13 개 compound 패키지가 동일 inline 패턴. + - `dynamicStyle` export + `./dynamic-style` subpath export 제거 — 모노레포 전체에서 실사용 0건. Skeleton / Scrollable 로드맵 컴포넌트 도입 시점에 CSS 변수 주입 방식 재검토. + + **런타임 버그 수정** + + - `ActionButton` 이 `withProvider("view", "root")` / `withContext("text", "text")` 로 intrinsic string 을 인자로 넘기고 있어 `BackgroundSnapshot not found: view` 런타임 에러를 유발하던 **기존 버그** 수정. `ActionButtonRoot` / `ActionButtonTextSlot` 을 파일-내 `forwardRef` + 리터럴 `` / `` JSX 로 재작성. PR #1489 가 BottomSheet 에만 적용한 fix 를 ActionButton 에도 동일하게 적용. + + **내부 정리** + + - `useControllableState`, `usePressTap` 훅을 `src/utils/` → `src/hooks/` 로 이동 (public export 이름 변경 없음, 상대 경로만 이동). + - `AGENTS.md` 에 "Native tag literal JSX constraint" 섹션 추가 — 허용/금지 패턴 표, PR #1489 (`withContext("view")` 실패) + **PR #1503 spike** (`createSlotRecipeContext` 공통 유틸 파일 안의 factory 도 실패) 실증 근거, Lynx 엔진 레벨 근본 원인(`ConvertStringTagToEnumTag` enum 변환 실패) 정리. **핵심 발견**: Lynx 컴파일러는 리터럴 `` / `` JSX 를 **파일 단위**로 정적 분석하기 때문에, 리터럴 JSX 가 렌더 대상 컴포넌트 파일과 동일한 파일 안에 있어야 한다 — 공통 유틸 파일의 helper 로 추출 불가. + + **Spike 실패 기록** + + 이번 PR 에서 `createSlotRecipeContext` 반환 객체에 `withViewContext(slot)` / `withTextContext(slot)` 헬퍼를 추가해 BottomSheet 의 로컬 `createViewSlot`/`createTextSlot` factory 를 대체하려 시도했으나, 런타임 `BackgroundSnapshot not found: view` 에러로 revert. 구조는 BottomSheet 의 기존 factory 와 동일 (1-layer `forwardRef` + 리터럴 ``) 이지만 선언 파일이 달라 Lynx 컴파일러의 파일-스코프 정적 분석을 통과하지 못함. BottomSheet 의 기존 `createViewSlot` / `createTextSlot` factory 는 그대로 유지. + +- d410a4c: Add recipe/slot-recipe context utilities and refactor ActionButton to use them. + + - `createRecipeContext`: single-slot recipe context with `withContext` HOC. + - `createSlotRecipeContext`: multi-slot recipe context with `withRootProvider` / `withProvider` / `withContext` for wrapping React function components, plus `withViewContext` / `withTextContext` factories that emit literal `` / `` JSX for native intrinsic slots (required to pass the Lynx compiler's BackgroundSnapshot static analysis). + - Export `NativeSlotProps` type for compound components extending native slot props. + - Internal `splitMultipleVariantsProps` utility for compound components that host multiple recipes (first consumer: TagGroup in a follow-up PR). + - `ActionButton` refactored internally to compose via `withProvider("view", "root")` + `withContext("text", "text")`. Public API unchanged. + +- ada0152: Lynx 플랫폼용 `Switch` 컴포넌트 추가 + + - `SwitchRoot`, `SwitchControl`, `SwitchThumb`, `SwitchLabel` export + - `useControllableState`와 `usePressTap` primitive 인라인 조합으로 구현 (별도 `useSwitch` 훅 없음) + - 웹 대비 제외: `SwitchHiddenInput`, `name`/`value`/`required`/`invalid`, focus/focusVisible (Lynx 런타임 미지원) + - `active` (pressed) 모디파이어는 `switchmark` recipe CSS에 pressed 상태 추가 시 활성화 예정 + +- 70054ea: TagGroup 컴포넌트 추가 + qvism preset 웹/Lynx 분리 + + - `@seed-design/lynx-react`: `TagGroupRoot`, `TagGroupItem`, `TagGroupItemLabel` 지원. Root에서 `size`/`weight`/`tone`을 Context로 Item에 전파, children 사이에 separator 자동 삽입 (기본 `" · "`, `separator` prop으로 커스텀 가능). 웹 대비 `` → ``/`` 렌더, `flexShrink`·`asChild`·아이콘 slot 미지원. + - `@seed-design/lynx-css`: qvism preset이 `@seed-design/qvism-preset` (웹) 과 `@seed-design/qvism-preset/lynx` (Lynx) 로 완전 분리됨. Lynx preset은 `@lynx-js/types`의 `CSSProperties` 타입으로 recipe 작성 시 미지원 property를 컴파일 타임에 차단. TagGroup recipe를 Lynx flex row 기반으로 재작성. + +### Patch Changes + +- 368b7d9: `BottomSheet`에 필요한 `@lynx-js/lynx-ui-sheet`를 `@seed-design/lynx-react`의 직접 의존성으로 포함합니다. + + - `BottomSheet` 사용 시 `@lynx-js/lynx-ui-sheet`를 별도로 설치하지 않아도 됩니다. + - Lynx `BottomSheet` 문서와 레지스트리 설치 안내를 패키지 의존성 구조에 맞게 정리합니다. + ## 0.1.1-alpha.0 ### Patch Changes diff --git a/packages/lynx-react/package.json b/packages/lynx-react/package.json index d0e32ba08..2e30c8839 100644 --- a/packages/lynx-react/package.json +++ b/packages/lynx-react/package.json @@ -1,6 +1,6 @@ { "name": "@seed-design/lynx-react", - "version": "0.1.1-alpha.0", + "version": "0.2.0-alpha.1", "repository": { "type": "git", "url": "git+https://github.com/daangn/seed-design.git",