@orioncactuscorp/ui 1.12.1 → 1.13.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,2445 @@
1
+ # Changelog
2
+
3
+ ## 1.13.0
4
+
5
+ ### Changes
6
+
7
+ <!-- generated:start -->
8
+
9
+ _Commit range: `@orioncactuscorp/ui@1.12.2..HEAD`_
10
+
11
+ #### Other
12
+
13
+ - `c35682c` npm 패키지 리소스 링크 자동화 (#230)
14
+ - `a120226` Badge size 명명 표준화 (#231)
15
+ <!-- generated:end -->
16
+
17
+ ### Minor Changes
18
+
19
+ - a120226: Badge의 작은 named size를 표준 size scale에 맞춰 `tiny`에서 `xsmall`로 정규화하고 TypeScript prop, 런타임 class, `data-oc-size` selector 계약을 일치시킵니다.
20
+
21
+ Migration Notes
22
+ - `<Badge size='tiny'>`를 `<Badge size='xsmall'>`로 변경
23
+ - `[data-oc-component='badge'][data-oc-size='tiny']` selector를 `[data-oc-component='badge'][data-oc-size='xsmall']`로 변경
24
+
25
+ ### Patch Changes
26
+
27
+ - c35682c: npm package README에서 공개 Storybook, 버전 고정 Changelog, UI Documentation, 의견 전달 경로를 바로 확인할 수 있도록 추가하고, 릴리즈 버전 변경 시 UI와 Icons의 jsDelivr 리소스 URL을 각 package manifest 버전에 맞춰 자동 갱신·검증합니다. publish 직전에는 README가 가리키는 리소스가 실제 tarball에 포함되는지 확인하고, Storybook 빌드에서는 README deep-link의 story ID를 검증합니다.
28
+
29
+ Migration Notes
30
+ - 없음
31
+
32
+ - Updated dependencies [c35682c]
33
+ - @orioncactuscorp/icons@1.13.0
34
+
35
+ ### Migration Notes
36
+
37
+ - `<Badge size='tiny'>`를 `<Badge size='xsmall'>`로 변경
38
+ - `[data-oc-component='badge'][data-oc-size='tiny']` selector를 `[data-oc-component='badge'][data-oc-size='xsmall']`로 변경
39
+
40
+ ## 1.12.2
41
+
42
+ ### Changes
43
+
44
+ <!-- generated:start -->
45
+
46
+ _Commit range: `@orioncactuscorp/ui@1.12.1..HEAD`_
47
+
48
+ #### Documentation
49
+
50
+ - `d8eb4eb` docs(release): document icon version alignment (#228)
51
+
52
+ #### Other
53
+
54
+ - `e442fed` npm 패키지 릴리즈 노트 포함 (#227)
55
+ <!-- generated:end -->
56
+
57
+ ### Patch Changes
58
+
59
+ - e442fed: npm package tarball에 누적 릴리즈 노트인 `CHANGELOG.md`를 포함하고, publish 전에 실제 pack 결과를 검증합니다.
60
+
61
+ Migration Notes
62
+ - 없음
63
+
64
+ - Updated dependencies [e442fed]
65
+ - @orioncactuscorp/icons@1.12.2
66
+
67
+ ### Migration Notes
68
+
69
+ - 없음
70
+
71
+ ## 1.12.1
72
+
73
+ ### Changes
74
+
75
+ <!-- generated:start -->
76
+
77
+ _Commit range: `@orioncactuscorp/ui@1.12.0..HEAD`_
78
+
79
+ #### Other
80
+
81
+ - `7315336` Storybook Foundation 레퍼런스 개선 (#220)
82
+ - `395c06e` Interaction radius 전달 방식 일원화 (#221)
83
+ - `8ea0a4d` 컴포넌트 prop 명명 계약 문서화 (#223)
84
+ - `268a64c` 컴포넌트 API 명명 컨벤션 공개 문서화 (#225)
85
+ <!-- generated:end -->
86
+
87
+ ### Patch Changes
88
+
89
+ - 268a64c: `variant`, `appearance`, `size` prop의 역할과 명명 규칙을 설명하는 공개 API 컨벤션 문서를 추가합니다.
90
+
91
+ ### Migration Notes
92
+
93
+ - 없음
94
+
95
+ ## 1.12.0
96
+
97
+ ### Changes
98
+
99
+ <!-- generated:start -->
100
+
101
+ _Commit range: `@orioncactuscorp/ui@1.11.0..HEAD`_
102
+
103
+ #### Maintenance
104
+
105
+ - `561a104` chore(deps): bump actions/setup-node from 6.4.0 to 7.0.0 (#208)
106
+ - `93a65e7` build(ui): exclude story helpers from declarations
107
+
108
+ #### Other
109
+
110
+ - `b13d6a9` npm 패키지 페이지 문서 링크 깨짐 수정 (#209)
111
+ - `104c187` 명시적 light theme cascade 우선순위 수정 (#213)
112
+ - `9c945d5` 네이티브 UI 테마 일치 (#214)
113
+ - `45b3453` 색상·타이포그래피 Foundation 문서화 (#216)
114
+ - `555f73a` Tooltip·ScrollArea z-index 계약 수정 (#217)
115
+ - `f80506b` Foundation reference 스토리 시각 마감 보강 (#218)
116
+ <!-- generated:end -->
117
+
118
+ ### Minor Changes
119
+
120
+ - 9c945d5: light/dark 테마 범위에 `color-scheme`을 선언해 네이티브 브라우저 UI를 테마와 일치
121
+
122
+ Migration Notes: dark 테마에서 네이티브 form control, scrollbar 등 브라우저 UI가 dark color scheme으로 렌더링됨. 기존 light 렌더링을 유지해야 하는 소비자는 package CSS import 이후 해당 범위의 `color-scheme`을 override해야 함
123
+
124
+ ### Patch Changes
125
+
126
+ - 45b3453: semantic color와 typography foundation의 역할 가이드, light/dark·responsive 기본값 표, Storybook 전체 token matrix 추가
127
+
128
+ Migration Notes: 런타임 token과 컴포넌트 API 변경 없음. 기존 consumer는 변경 없이 업데이트할 수 있으며, 새 문서에서 theme·typography override 경로를 확인할 수 있음
129
+
130
+ - 104c187: OS dark mode에서 명시적 light theme가 system preference에 덮이던 문제 수정
131
+
132
+ Migration Notes: `<html data-theme="light">`처럼 light theme를 명시한 소비자는 업데이트 후 OS 설정과 무관하게 의도한 light token이 적용됨
133
+
134
+ - 555f73a: Tooltip과 ScrollArea가 정의되지 않은 `--oc-z-index-floating` 변수에 의존하던 문제를 수정합니다.
135
+
136
+ Migration Notes
137
+ - Tooltip은 기본적으로 Modal보다 높은 `--oc-zindex-5` 레이어에 렌더링됩니다.
138
+ - 특수 stacking context에서 Tooltip layer 조정이 필요하면 `--oc-tooltip-z-index`를 사용합니다.
139
+ - ScrollArea scrollbar는 외부 floating layer가 아닌 ScrollArea 내부 로컬 stacking context에 유지됩니다.
140
+
141
+ - b13d6a9: npm 패키지 페이지에서 깨지던 README 문서 링크 수정
142
+ - README의 `docs/` 상대 링크 15개를 버전 고정 jsDelivr 절대 URL(`https://cdn.jsdelivr.net/npm/@orioncactuscorp/ui@<version>/docs/*.md`)로 교체. npm 패키지 페이지는 README만 렌더링하고 tarball 내부 파일 경로를 해석하지 못해, 기존 상대 링크가 `https://www.npmjs.com/package/@orioncactuscorp/docs/*.md`로 잘못 풀리며 깨져 있었음
143
+ - Documentation 섹션의 웹 열람 안내를 unpkg에서 jsDelivr로 통일
144
+ - 링크 버전은 `bun run agent:sync-version`이 릴리스마다 stamp하고 `agent:check-version`이 릴리스 게이트에서 검증
145
+ - 런타임 코드 변경 없음
146
+
147
+ ### Migration Notes
148
+
149
+ - dark 테마에서 네이티브 form control, scrollbar 등 브라우저 UI가 dark color scheme으로 렌더링됩니다. 기존 light 렌더링을 유지해야 하는 소비자는 package CSS import 이후 해당 범위의 `color-scheme`을 override하세요.
150
+ - `<html data-theme="light">`처럼 light theme를 명시한 소비자는 업데이트 후 OS 설정과 무관하게 의도한 light token이 적용됩니다.
151
+ - Tooltip은 기본적으로 Modal보다 높은 `--oc-zindex-5` 레이어에 렌더링됩니다.
152
+ - 특수 stacking context에서 Tooltip layer 조정이 필요하면 `--oc-tooltip-z-index`를 사용하세요.
153
+ - ScrollArea scrollbar는 외부 floating layer가 아닌 ScrollArea 내부 로컬 stacking context에 유지됩니다.
154
+ - 런타임 token과 컴포넌트 API 변경 없음. 기존 consumer는 변경 없이 업데이트할 수 있으며, 새 문서에서 theme·typography override 경로를 확인할 수 있습니다.
155
+
156
+ ## 1.11.0
157
+
158
+ ### Changes
159
+
160
+ <!-- generated:start -->
161
+
162
+ _Commit range: `@orioncactuscorp/ui@1.10.0..HEAD`_
163
+
164
+ #### Other
165
+
166
+ - `5ee56c3` Popup 콘텐츠 전환의 자체 애니메이션 콘텐츠 경쟁 수정 (#193)
167
+ - `06a0fc5` 소비자 문서 패키지 동봉 및 README 문서 허브화 (#195)
168
+ - `909c113` 토큰 인덱스 생성기 추출 로직 공용화 및 단위 테스트 추가 (#196)
169
+ - `417e28b` 미테스트 컴포넌트 테스트 보강 및 onCheckedChange 계약 고정 (#197)
170
+ - `54c51bf` ref 병합 로직 공유 유틸(mergeRefs)로 통합 (#198)
171
+ - `eb69148` 복합 위젯 키보드 APG 동작 테스트 추가 (#199)
172
+ - `1eb5ffb` focus-ring 토큰 도입 및 :focus-visible 표현 중앙집중화 (#200)
173
+ - `dcc2791` Tabs 컴포넌트 추가 (#204)
174
+ - `8ace1d4` foundations.css + per-component 주입 권장화 (#205)
175
+ - `da890ab` Modal snap 테스트 안정화 (#206)
176
+ <!-- generated:end -->
177
+
178
+ ### Minor Changes
179
+
180
+ - 1eb5ffb: 키보드 포커스 ring foundation 도입 및 :focus-visible 표현 중앙집중화
181
+ - 신규 public 토큰: `--oc-focus-ring-width`(2px), `--oc-focus-ring-offset`(2px), `--oc-color-theme-focus-ring`(기본 `--oc-color-theme-primary-normal` alias, light/dark 대응)
182
+ - 신규 SCSS 믹스인 `oc-focus-ring` (`@orioncactuscorp/ui/scss/mixins/focus`)
183
+ - reset 레이어가 `button`, `a[href]`, `summary`, `[tabindex]`의 `:focus-visible`에 ring을 전역 기본값으로 제공 (기존: `button:focus-visible { outline: none }`으로 전역 제거)
184
+ - 모든 focusable 컴포넌트(버튼류, Cell, Menu, Accordion, Tooltip trigger, Modal 내비게이션)가 키보드 포커스 시 ring 표시. Interaction tint(면 피드백)는 보조로 유지
185
+ - 선택 컨트롤(Checkbox/Radio/Switch/CheckMark)의 하드코딩 outline을 토큰 경유로 교체 (시각 결과 동일)
186
+ - Field 계열(TextInput/TextArea/Select)은 기존 `:focus-within` border 강조 유지, Modal surface/Menu popup 같은 프로그램 포커스 표면은 ring 미적용
187
+ - ring은 `outline` 기반이라 요소 border-radius를 자동 추종하고 forced-colors(고대비) 모드에서도 유지됨
188
+
189
+ Migration Notes
190
+ - 기존 reset의 outline 제거에 의존하던 소비자 UI는 키보드 포커스 시 ring이 새로 표시됩니다 (포인터 인터랙션은 변화 없음). 특정 요소에서 원치 않으면 해당 요소에 `outline: none`을 선언하세요 — 전역 규칙은 `:where()`(specificity 0)라 어떤 로컬 선언이든 우선합니다.
191
+ - ring 색/두께는 `--oc-color-theme-focus-ring`, `--oc-focus-ring-width`, `--oc-focus-ring-offset` override로 리테마할 수 있습니다.
192
+ - `all: unset`을 사용하는 focusable 요소는 전역 ring도 함께 제거되므로 `@include oc-focus-ring`으로 재적용이 필요합니다.
193
+
194
+ - dcc2791: Tabs 컴포넌트 추가
195
+ - `TabsRoot`, `TabsList`, `TabsTab`, `TabsPanel` compound API 추가
196
+ - controlled/uncontrolled 선택, 자동·수동 키보드 활성화, RTL, disabled, keep-mounted panel 지원
197
+ - size, full-width, logical padding, trailing slot, indicator, overflow edge fade 커스터마이즈 계약 추가
198
+ - tab 상하 padding을 large/medium은 `--oc-space-item-padding-mini`, small은 `--oc-space-item-padding-tiny`에 매핑
199
+ - tab inline padding을 Interaction의 외부 확장으로 전환하고 확장값 2배의 gap 적용
200
+ - 외부 Interaction을 pointer hit area로 사용하고 `padding=true`에서 viewport 좌우 여백 적용
201
+ - Interaction 배경을 transparent로 유지해 label 색 기반 상태 피드백 제공
202
+ - indicator에 max radius 기본값과 `--oc-tabs-indicator-radius` 재정의 계약 추가
203
+ - `TabsList` typography를 large `headline2`, medium `body1`, small `body2` bold로 매핑하고 각 tab item의 상속·소비자 CSS 재정의 지원
204
+ - overflow edge mask가 부드럽게 나타나고 사라지는 transition 추가
205
+ - 선택 tab을 edge mask 안쪽으로 스크롤하고 reduced motion에서는 smooth scroll 제거
206
+ - tab 관계와 키보드 탐색에 필요한 ARIA, role, panel id/hidden 속성 보호
207
+
208
+ Migration Notes
209
+ - 없음
210
+
211
+ ### Patch Changes
212
+
213
+ - 06a0fc5: 소비자 문서를 npm 패키지에 동봉하고 README를 문서 허브로 재구성
214
+ - `docs/`를 패키지 `files`에 추가: selector contract 공개본, SCSS helpers 가이드(`oc-border` 전체 시그니처, `oc-alpha`, `typo`, `respond-to`, `fluidClamp`), semantic motion/spring 가이드, responsive foundation profile, `--oc-*` token reference(자동 생성), stability policy, editor setup
215
+ - README에 Documentation 색인, Customization(`data-oc-*`) 섹션, 브라우저 지원 기준(`color-mix()` 기준선), Exports 설명 표(`foundations/*.css`, `utils/breakpoints`, `scss/index.scss` 문서화) 추가
216
+ - 런타임 코드 변경 없음
217
+
218
+ Migration Notes
219
+ - 없음
220
+
221
+ - 8ace1d4: CSS 소비 경로 정리 — `foundations.css` + per-component 자동 주입을 기본 경로로 문서화
222
+ - 권장 경로를 `foundations.css`(토큰 + reset) 1회 import + 컴포넌트 자동 주입으로 재정의. 사용한 컴포넌트 CSS만 로드되어 styles.css 전량 import 대비 번들 절감(examples/nextjs 실측 −57%)
223
+ - `styles.css`는 "CSS Modules 번들러가 없는 환경"용 단일 파일 대안으로 강등 문서화. `styles.css`에는 파운데이션이 내장되어 있어 `foundations.css`와 병행 import하면 이중 로드됨을 명시
224
+ - per-component 주입 무결성을 지키는 빌드 후 검사(`check:css-injection`) 추가: 모든 컴포넌트 chunk가 자기 CSS를 주입하고 고아 CSS가 없음을 보장
225
+
226
+ Migration Notes
227
+ - 기존 `styles.css` import 경로는 계속 동작합니다. breaking change 아님
228
+ - 컴포넌트 자동 주입은 CSS Modules를 처리하는 번들러(Next.js, Vite 등)를 전제로 합니다. 해당 환경이 아니면 `styles.css`를 사용하세요
229
+ - 주입되는 컴포넌트 CSS는 cascade layer 밖(unlayered)입니다. `[data-oc-*]` selector로 개별 property를 override할 때는 selector contract대로 consumer CSS가 컴포넌트 CSS보다 나중에 로드되도록 유지하세요(`--oc-*` 변수 override는 로드 순서와 무관하게 동작)
230
+
231
+ - 54c51bf: ref 병합 로직을 공유 유틸(mergeRefs)로 통합하고 React 19 callback-ref cleanup 지원
232
+ - 10개 파일에 중복되던 인라인 ref 병합 로직을 내부 `mergeRefs` 유틸로 통합 (public export 아님)
233
+ - ref를 받는 컴포넌트(TextInput, TextArea, Select, Checkbox, Cell, Accordion, ActionAreaLayout, ScrollArea, Modal 하위 slot, MotionExpand)에 소비자가 cleanup을 반환하는 callback ref를 전달하면 이제 React 19 시맨틱대로 detach 시 cleanup이 호출됨 (기존: cleanup이 무시되고 null로 재호출)
234
+ - cleanup을 반환하지 않는 callback ref와 object ref의 동작은 기존과 동일
235
+
236
+ Migration Notes
237
+ - 없음
238
+
239
+ - 5ee56c3: Popup(`resize='content'`)에서 NavigationSection을 접거나 펼칠 때 surface 높이가 조금만 움직이다가 전환이 끝나는 순간 실제 높이로 낙하하던 문제를 수정합니다. 콘텐츠 블록 전환 훅이 불연속 스왑을 전제로 첫 프레임의 비행 중인 중간 높이를 목표로 고정하고 이후 변화를 잠갔던 것이 원인입니다. 이제 ResizeObserver 전달 시점과 다음 프레임 사이에 크기가 계속 움직이는 자체 애니메이션 콘텐츠(예: NavigationSection의 expand motion)를 감지하면 개입하지 않고 자연 추종하며, 한 번에 바뀌는 불연속 콘텐츠 교체는 기존대로 부드럽게 전환합니다.
240
+
241
+ Migration Notes
242
+ - 없음
243
+
244
+ ### Migration Notes
245
+
246
+ - 기존 reset의 outline 제거에 의존하던 소비자 UI는 키보드 포커스 시 ring이 새로 표시됩니다 (포인터 인터랙션은 변화 없음). 특정 요소에서 원치 않으면 해당 요소에 `outline: none`을 선언하세요 — 전역 규칙은 `:where()`(specificity 0)라 어떤 로컬 선언이든 우선합니다.
247
+ - ring 색/두께는 `--oc-color-theme-focus-ring`, `--oc-focus-ring-width`, `--oc-focus-ring-offset` override로 리테마할 수 있습니다.
248
+ - `all: unset`을 사용하는 focusable 요소는 전역 ring도 함께 제거되므로 `@include oc-focus-ring`으로 재적용이 필요합니다.
249
+ - 기존 `styles.css` import 경로는 계속 동작합니다. breaking change 아님
250
+ - 컴포넌트 자동 주입은 CSS Modules를 처리하는 번들러(Next.js, Vite 등)를 전제로 합니다. 해당 환경이 아니면 `styles.css`를 사용하세요
251
+ - 주입되는 컴포넌트 CSS는 cascade layer 밖(unlayered)입니다. `[data-oc-*]` selector로 개별 property를 override할 때는 selector contract대로 consumer CSS가 컴포넌트 CSS보다 나중에 로드되도록 유지하세요(`--oc-*` 변수 override는 로드 순서와 무관하게 동작)
252
+
253
+ ## 1.10.0
254
+
255
+ ### Changes
256
+
257
+ <!-- generated:start -->
258
+
259
+ _Commit range: `@orioncactuscorp/ui@1.9.2..HEAD`_
260
+
261
+ #### Breaking Changes
262
+
263
+ - `80bb9d0` Bottom sheet backdrop을 snap 임계 기반 modality로 재정의 (#191)
264
+
265
+ #### Other
266
+
267
+ - `a63b87e` 콘텐츠 높이 전환 중 footer 위치·scroll 배경 안정화 (#190)
268
+ <!-- generated:end -->
269
+
270
+ ### Minor Changes
271
+
272
+ - 80bb9d0: Bottom sheet의 backdrop을 modality 신호로 재정의합니다. iOS `largestUndimmedDetentIdentifier` 모델을 따라, 안착 snap 기준 이진(dim 0 또는 1) 상태와 경계 구간 보간으로 동작합니다.
273
+ - `ModalContent`에 `backdropFrom?: ModalSnapPoint` prop을 추가합니다. 지정한 snap 미만의 detent에 안착하면 backdrop이 없고 non-modal(배경 상호작용 가능, 포커스 트랩 해제, backdrop pointer 통과)이며, 해당 snap 이상 detent에 안착하면 완전한 dim과 modal 상태가 됩니다. backdrop opacity는 가장 큰 undimmed snap과 `backdropFrom` snap 사이를 이동하는 동안에만 보간됩니다. 값은 `snapPoints` 멤버여야 하며 아니면 개발 모드 경고와 함께 무시됩니다.
274
+ - dim 상태에서 backdrop을 탭하면 dismiss가 불가하거나 peek로 접히던 시트는 가장 큰 undimmed snap으로 collapse합니다. dismiss 가능한 비peekable 시트는 기존대로 dismiss합니다.
275
+ - non-modal 안착 상태의 backdrop 레이어는 `data-oc-modal-backdrop-passthrough="true"`를 노출합니다.
276
+ - elevation shadow는 dimmer의 보완 관계(`shadow = 1 − dim`)를 모든 상태에서 유지합니다. dim이 있는 안착에서는 shadow가 없고, undimmed 안착(non-modal)에서는 shadow가 시트를 배경과 분리하며, 경계 구간 이동 중에는 둘이 크로스페이드됩니다.
277
+ - `snapPoints`가 있고 `backdropFrom`이 없는 경우의 기본 동작이 변경됩니다: 기존에는 backdrop opacity가 시트 가시 높이에 비례했지만, 이제 모든 snap detent에서 1로 유지되고 최저 snap 아래 진입/이탈/peek 구간에서만 페이드됩니다.
278
+
279
+ Migration Notes
280
+ - `snapPoints`를 사용하는 bottom sheet의 중간 snap에서 backdrop이 부분 투명(가시 높이 비례)이던 동작이 제거되고 모든 snap에서 완전한 dim(1)이 됩니다. 이전처럼 낮은 snap에서 배경을 덜 가리려면 `backdropFrom`으로 dim이 시작될 snap을 지정하세요. 예: `snapPoints={[0.36, 0.72, 0.92]} backdropFrom={0.92}`.
281
+ - `backdropFrom` 미만 snap에 안착한 시트는 non-modal로 전환되어 포커스 트랩이 해제되고 배경이 상호작용 가능해집니다. 배경 클릭이 시트를 닫지 않으므로(outside-press 무시), 이 상태에서 닫기가 필요하면 명시적 닫기 UI를 제공하세요.
282
+
283
+ ### Patch Changes
284
+
285
+ - a63b87e: Bottom sheet 콘텐츠 높이 전환(depth/탭 이동) 중 footer(ActionArea)가 한 프레임에 아래로 튕겼다가 스프링으로 복귀하거나(확장), 내려갔다가 커밋 시점에 위로 스냅되던(축소) 문제를 수정합니다. 단일 축 canvas 전환은 시트 상단 연속성만 보장하고 surface 물리 하단은 live translate를 따라 움직이는데, footer가 물리 하단에 고정되어 있어 전환 내내 함께 흔들렸습니다. 이제 canvas settle 동안 `data-oc-modal-sheet-resizing` 상태로 footer를 시트의 보이는 하단(커밋 후 안착 지점)에 앵커해 매 스프링 프레임 제자리에 유지합니다.
286
+
287
+ Migration Notes
288
+ - 없음
289
+
290
+ - a63b87e: Bottom sheet 콘텐츠 높이 전환(depth/탭 이동) 중 footer(ActionArea)의 scroll 배경 gradient가 잠깐 나타났다가 사라지던 깜빡임을 수정합니다. 전환 동안 scrollport가 프레임 단위로 이전 크기에서 목표 크기로 움직이는 사이, 이미 최종 크기로 스왑된 콘텐츠와 비교되어 "일시적으로 스크롤 가능" 상태가 잘못 보고되던 문제입니다. 이제 canvas settle 동안 스크롤 상태를 목적지 scrollport 높이와 콘텐츠 실측 높이 기준으로 평가해 최종 상태와 일치시키고, settle 중의 과도 상태 보정은 opacity 전환 없이 스냅되어 화면에 드러나지 않습니다. 실제로 스크롤이 필요한 목적지에서는 gradient가 기존 scale 전환으로 부드럽게 등장합니다.
291
+
292
+ Migration Notes
293
+ - 없음
294
+
295
+ ### Migration Notes
296
+
297
+ - `snapPoints`를 사용하는 bottom sheet의 중간 snap에서 backdrop이 부분 투명(가시 높이 비례)이던 동작이 제거되고 모든 snap에서 완전한 dim(1)이 됩니다. 이전처럼 낮은 snap에서 배경을 덜 가리려면 `backdropFrom`으로 dim이 시작될 snap을 지정하세요. 예: `snapPoints={[0.36, 0.72, 0.92]} backdropFrom={0.92}`.
298
+ - `backdropFrom` 미만 snap에 안착한 시트는 non-modal로 전환되어 포커스 트랩이 해제되고 배경이 상호작용 가능해집니다. 배경 클릭이 시트를 닫지 않으므로(outside-press 무시), 이 상태에서 닫기가 필요하면 명시적 닫기 UI를 제공하세요.
299
+
300
+ ## 1.9.2
301
+
302
+ ### Changes
303
+
304
+ <!-- generated:start -->
305
+
306
+ _Commit range: `@orioncactuscorp/ui@1.9.1..HEAD`_
307
+
308
+ #### Other
309
+
310
+ - `4acf4e8` Modal size padding 변수 추가 (#188)
311
+ <!-- generated:end -->
312
+
313
+ ### Patch Changes
314
+
315
+ - 4acf4e8: Modal size별 width와 padding CSS 변수를 추가하고, header/body/footer padding이 container padding contract를 기본으로 공유하도록 개선합니다.
316
+
317
+ Migration Notes
318
+ - 없음
319
+
320
+ ### Migration Notes
321
+
322
+ - 없음
323
+
324
+ ## 1.9.1
325
+
326
+ ### Changes
327
+
328
+ <!-- generated:start -->
329
+
330
+ _Commit range: `@orioncactuscorp/ui@1.9.0..HEAD`_
331
+
332
+ #### Fixes
333
+
334
+ - `7481fe6` fix(modal): arbitrate mouse body drags against text selection (#185)
335
+ - `5254c1e` fix(modal): sync settle scrollport to the sheet frame by frame (#186)
336
+
337
+ #### Other
338
+
339
+ - `0018769` Bottom sheet 콘텐츠 전환 단일 축 재구성 (#184)
340
+ <!-- generated:end -->
341
+
342
+ ### Patch Changes
343
+
344
+ - 7481fe6: Bottom sheet 본문을 마우스로 드래그할 때 텍스트 선택과 시트 조작을 중재합니다. 기존에는 본문 마우스 드래그가 시트를 움직이지 않고 브라우저 텍스트 선택으로 흘러, 위로 끌면 선택 오토스크롤이 본문 스크롤 위치를 맨 위로 되감는 문제가 있었습니다. 이제 제스처가 명확히 수직(12px 이상, 수직 우세)이면 시트 드래그로 승격하고, 수평 우세면 텍스트 선택에 양보합니다. 드래그 시작 시점에 이미 활성 선택이 있으면 기존처럼 선택 조작을 보호합니다.
345
+
346
+ Migration Notes
347
+ - 없음
348
+
349
+ - 5254c1e: Bottom sheet를 드래그 후 릴리즈해 위 snap으로 안착할 때 본문 스크롤이 한 프레임에 확 당겨지던 문제를 수정합니다. 릴리즈 settle이 visible scrollport를 목표 크기로 즉시 고정해 시트가 시각적으로 도착하기 전에 브라우저 스크롤 클램프가 발생했습니다. 이제 릴리즈/스냅 settle은 드래그와 동일하게 scrollport를 스프링 프레임마다 시트에 동기하고, entrance settle만 기존처럼 목표를 미리 고정해 footer 스크롤 상태 깜빡임을 방지합니다.
350
+
351
+ Migration Notes
352
+ - 없음
353
+
354
+ - 0018769: Bottom sheet의 콘텐츠 높이 전환을 단일 축으로 재구성합니다. 기존에는 height transition(메인 스레드)과 transform transition(컴포지터)을 함께 애니메이션해 메인 스레드 부하 시 두 클럭이 어긋나며 시트가 흔들렸습니다. 이제 전환 동안 surface를 두 크기를 모두 덮는 canvas 높이에 고정하고 translate 하나만 스프링으로 움직인 뒤, 도착 프레임에서 실제 높이로 교체(화면 밖 영역이라 시각적 no-op)합니다. inline height 소유권을 drag hook으로 단일화해 React 렌더 커밋이 보상 프레임보다 먼저 높이를 페인트하던 문제도 함께 제거했습니다.
355
+
356
+ Migration Notes
357
+ - 없음
358
+
359
+ ### Migration Notes
360
+
361
+ - 없음
362
+
363
+ ## 1.9.0
364
+
365
+ ### Changes
366
+
367
+ <!-- generated:start -->
368
+
369
+ _Commit range: `@orioncactuscorp/ui@1.8.0..HEAD`_
370
+
371
+ #### Other
372
+
373
+ - `d3edc13` Border와 버튼 sizing contract 확장 (#154)
374
+ - `600c887` 릴리스 문서화와 버전 일관성 CI 게이트 추가 (#156)
375
+ - `0e3af18` Modal BottomSheet 안착 스크롤포트 안정화 (#157)
376
+ - `eed2a62` PR CI 경량화(webkit 스코프 축소·문서 변경 스킵) (#158)
377
+ <!-- generated:end -->
378
+
379
+ ### Minor Changes
380
+
381
+ - 0e3af18: `ModalContent`에 콘텐츠 교체 시 surface 높이 변화를 전환하는 `contentTransition` contract를 추가합니다. 기본값 `auto`는 content-resize popup/bottom sheet에서 depth navigation처럼 본문이 바뀌는 경우 높이 변화를 부드럽게 처리하고, snap이 있는 bottom sheet는 snap geometry가 높이 전환을 계속 소유합니다.
382
+
383
+ Bottom sheet는 콘텐츠 높이 변경이나 viewport resize 이후에도 마지막 rest state를 의미 단위(default snap, 특정 snap, expanded, custom)로 보존하도록 개선합니다. 짧은 탭에서 긴 탭으로 바로 이동해도 사용자가 확장하지 않았다면 1차 snap에 머무릅니다.
384
+
385
+ Migration Notes
386
+ - `ModalContent`의 `contentTransition` 기본값은 `auto`입니다. 콘텐츠 교체 시 높이 전환이 필요 없거나 자체 animation을 사용하는 경우 `contentTransition="none"`을 지정하세요.
387
+
388
+ - 0e3af18: `ModalContent`에 `snapPoints`를 줄 때 `resize='content'`(기본)이면 시트가 콘텐츠 높이에 맞춰 hug하면서 snap 지점을 detent로 사용하도록 개선합니다. 콘텐츠가 가장 작은 snap보다 짧으면 그 높이로 hug하고, 길면 `defaultSnapPoint`에서 열린 뒤 handle을 끌어 상위 snap으로 확장하며 본문을 스크롤합니다. 시트를 항상 가장 큰 snap 높이로 고정하려면 `resize='fixed'`를 사용합니다.
389
+
390
+ Migration Notes
391
+ - `snapPoints` + `resize='content'`(기본)에서 시트 높이가 "항상 최대 snap 고정"에서 content-hug로 바뀝니다. 기존처럼 최대 snap 높이로 고정하려면 `resize='fixed'`로 전환하세요.
392
+
393
+ ### Patch Changes
394
+
395
+ - 0e3af18: Modal bottom sheet의 content height transition을 sheet geometry 레이어에서 처리하도록 개선합니다.
396
+
397
+ Migration Notes:
398
+ - 없음
399
+
400
+ - 0e3af18: BottomSheet가 확장 상태에서 peeked 상태로 안착하는 동안 visible scrollport가 먼저 줄어들지 않도록 수정합니다.
401
+
402
+ Migration Notes:
403
+ - `Modal` BottomSheet의 settle transition 중 body scrollport는 도착 전까지 현재 보이는 영역을 유지합니다.
404
+ - 추가 마이그레이션은 필요하지 않습니다.
405
+
406
+ - 0e3af18: Bottom sheet의 1차 snap 상태에서 Modal body scrollport를 실제로 보이는 sheet 높이에 맞추고, viewport 높이 변경 시 snap metric과 expanded 상태를 안정적으로 보존하도록 개선합니다.
407
+
408
+ ScrollArea가 애니메이션 중인 scrollport와 track geometry를 안정적으로 재측정해, 콘텐츠 전환 직후에도 scrollbar thumb 크기를 실제 viewport에 맞게 갱신합니다.
409
+
410
+ - 0e3af18: `ModalHeader`에 tab/버튼처럼 한 줄보다 큰 커스텀 콘텐츠를 넣어 헤더가 기본 한 줄(`2rem` row) 높이보다 커질 때, body가 정적 예약 높이(`2rem + padding`)만 확보해 콘텐츠 상단이 헤더에 가려지던 문제를 수정합니다. 측정된 실제 헤더 높이(`--oc-modal-header-height`)를 surface에 반영해 body 예약 공간이 헤더 높이를 따라가도록 합니다.
411
+
412
+ Migration Notes
413
+ - 없음
414
+
415
+ - 0e3af18: `ModalContent`의 `backdrop="hidden"` 상태에서 dimmer/backdrop 레이어를 최종 제거하고, visible/compact에서 hidden으로 바뀔 때는 opacity exit transition을 유지하도록 수정합니다.
416
+
417
+ Migration Notes:
418
+ - `data-oc-modal-backdrop="hidden"` 상태는 `modal-content`에 유지되며, settled hidden 상태에서는 `data-oc-component="modal-backdrop"` 요소가 렌더링되지 않습니다.
419
+ - visible/compact에서 hidden으로 전환되는 동안에는 `data-oc-component="modal-backdrop"` 요소가 opacity transition 종료 시점까지 임시 유지될 수 있습니다.
420
+ - hidden backdrop 상태의 모달 그림자는 backdrop opacity와 연동해 fade되지 않고 surface elevation으로 유지됩니다.
421
+ - hidden backdrop 요소에 의존한 스타일, 레이아웃, hit test 커스터마이징은 `modal-content` 또는 `surface` 레이어 기준으로 이전해야 합니다.
422
+
423
+ - 0e3af18: BottomSheet를 초기 `peeked` 상태(`presentationState="peeked"` 또는 `defaultPresentationState="peeked"`)로 열 때, mount 시점에 Base UI가 popup ref를 붙이기 전에 entrance settle이 실행되어 시트가 접히지 않고 visible 위치에 그대로 남던 문제를 수정합니다. surface 노드가 마운트되면 entrance settle이 다시 실행되어 navigation만 걸친 docked panel이 정상적으로 표시됩니다.
424
+
425
+ Migration Notes
426
+ - 없음
427
+
428
+ - 0e3af18: Bottom Modal의 content-hug snap 높이 변경 시 sheet height와 translate 기준을 동기화해 탭 전환 중 튀거나 접히는 전환을 방지하고, height transition을 추가합니다. 부분 snap 상태에서는 터치 본문 제스처가 내부 스크롤보다 sheet 확장을 먼저 처리하도록 조정하고, `ScrollArea` thumb가 viewport 크기 변화에 맞춰 다시 계산되도록 개선합니다.
429
+
430
+ Migration Notes
431
+ - 없음
432
+
433
+ - d3edc13: `oc-border` mixin이 `1px solid top outer var(--stroke)` 같은 CSS-like shorthand를 지원하도록 확장하고, Button/TextButton/Accordion/Modal의 아이콘 sizing을 `oc-icon-box` mixin으로 통일합니다.
434
+
435
+ Migration Notes
436
+ - `oc-border`의 기존 호출 방식은 유지됩니다.
437
+ - 아이콘 sizing이 `oc-icon-box` mixin으로 통일됩니다. `block-size`만 line box(`1lh`) 기준으로 잡고 `inline-size: auto`로 두어 SVG viewBox 비율을 보존합니다. 정사각으로 강제되던 비정사각 아이콘은 이제 원본 비율로 렌더링됩니다.
438
+ - `--oc-*-icon-size` 직접 override는 유지되며, 의미가 "정사각 박스 크기"에서 "아이콘 높이(너비는 viewBox 비율로 결정)"로 바뀝니다. `--oc-*-icon-padding-block`으로 line box에서 뺄 여백을 조정할 수 있습니다.
439
+ - Accordion/Modal disclosure indicator의 `*-size-reduction` contract는 `*-padding-block`으로 대체됩니다.
440
+ - Button/TextButton/Accordion/Modal의 기본 아이콘 렌더링 크기는 유지됩니다(모던 브라우저 기준 ±1px 이내).
441
+ - `1lh` 미지원(pre-2023) 브라우저 fallback은 `--oc-*-icon-padding-block` 기반 `1.5em - padding-block*2`로 자동 근사되며, 모던 브라우저 결과에는 영향이 없습니다.
442
+
443
+ - 0e3af18: `ScrollArea` scrollbar 위치를 조정할 수 있는 inset CSS 변수 contract를 추가합니다. `Modal` bottom sheet는 이 contract를 사용해 부분 snap 상태의 visible 영역에 맞춰 scrollbar track 높이를 조정합니다.
444
+
445
+ Migration Notes
446
+ - 없음
447
+
448
+ ### Migration Notes
449
+
450
+ - `ModalContent`의 `contentTransition` 기본값은 `auto`입니다. 콘텐츠 교체 시 높이 전환이 필요 없거나 자체 animation을 사용하는 경우 `contentTransition="none"`을 지정하세요.
451
+ - `snapPoints` + `resize='content'`(기본)에서 시트 높이가 "항상 최대 snap 고정"에서 content-hug로 바뀝니다. 기존처럼 최대 snap 높이로 고정하려면 `resize='fixed'`로 전환하세요.
452
+ - `data-oc-modal-backdrop="hidden"` 상태는 `modal-content`에 유지되며, settled hidden 상태에서는 `data-oc-component="modal-backdrop"` 요소가 렌더링되지 않습니다. hidden backdrop 요소에 의존한 스타일, 레이아웃, hit test 커스터마이징은 `modal-content` 또는 `surface` 레이어 기준으로 이전해야 합니다.
453
+ - 아이콘 sizing이 `oc-icon-box` mixin으로 통일됩니다. `--oc-*-icon-size` 직접 override는 유지되지만 의미가 "정사각 박스 크기"에서 "아이콘 높이(너비는 viewBox 비율로 결정)"로 바뀝니다.
454
+ - Accordion/Modal disclosure indicator의 `*-size-reduction` contract는 `*-padding-block`으로 대체됩니다.
455
+
456
+ ## 1.8.0
457
+
458
+ ### Changes
459
+
460
+ <!-- generated:start -->
461
+
462
+ _Commit range: `@orioncactuscorp/ui@1.7.0..HEAD`_
463
+
464
+ #### Other
465
+
466
+ - `f5e9a43` 디스클로저 인디케이터 정렬 개선 (#151)
467
+ - `0f2414f` Modal 고정 높이와 fill layout 추가 (#152)
468
+ <!-- generated:end -->
469
+
470
+ ### Minor Changes
471
+
472
+ - 0f2414f: Modal의 `resize` 값을 `content | fixed`로 정리하고, `resize="fixed"`에서 `--oc-modal-fixed-block-size`, `--oc-modal-fixed-max-block-size`, `--oc-modal-popup-fixed-max-block-size` CSS 변수로 surface 높이와 popup 상한을 조정할 수 있도록 개선합니다. `ModalBody`에는 `layout="fill"`을 추가해 header/footer reserve를 유지하면서 iframe, 지도, 에디터 같은 임베드 콘텐츠가 남은 body 영역을 채울 수 있도록 지원합니다.
473
+
474
+ Migration Notes
475
+ - `ModalContent resize="hug"`를 `resize="content"`로 변경
476
+ - 고정 높이 Modal은 `resize="fixed"`와 `--oc-modal-fixed-block-size` CSS 변수 사용
477
+ - iframe, 지도, 에디터처럼 body 남은 영역을 채워야 하는 콘텐츠는 `ModalBody layout="fill"` 사용
478
+
479
+ ### Patch Changes
480
+
481
+ - f5e9a43: Accordion과 Modal navigation의 disclosure indicator를 `1lh` frame 안에서 중앙 정렬하도록 개선하고, `--oc-accordion-disclosure-indicator-size`, `--oc-accordion-disclosure-indicator-size-reduction`, `--oc-modal-navigation-indicator-size`, `--oc-modal-navigation-indicator-size-reduction` CSS 변수로 소비자 커스터마이징을 지원합니다. Accordion의 기본 indicator size reduction은 `0.25em`으로 조정합니다.
482
+
483
+ Migration Notes
484
+ - 없음
485
+
486
+ ### Migration Notes
487
+
488
+ - `ModalContent resize="hug"`를 `resize="content"`로 변경
489
+ - 고정 높이 Modal은 `resize="fixed"`와 `--oc-modal-fixed-block-size` CSS 변수 사용
490
+ - iframe, 지도, 에디터처럼 body 남은 영역을 채워야 하는 콘텐츠는 `ModalBody layout="fill"` 사용
491
+
492
+ ## 1.7.0
493
+
494
+ ### Changes
495
+
496
+ <!-- generated:start -->
497
+
498
+ _Commit range: `@orioncactuscorp/ui@1.6.0..HEAD`_
499
+
500
+ #### Maintenance
501
+
502
+ - `3be611c` chore(deps): bump changesets action
503
+ - `7c01a10` chore(deps): bump checkout action
504
+ - `0bf573e` chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 (#141)
505
+
506
+ #### Other
507
+
508
+ - `dd8ac62` Cell·Accordion 구분선 피드백 개선 (#140)
509
+ - `310a737` Menu z-index와 placement API 정리 (#142)
510
+ - `479eeac` 비활성 버튼 인터랙션 피드백 정리 (#143)
511
+ - `8fd7fa2` cssvar 자동완성 설정 문서 보완 (#144)
512
+ - `dbe4c71` Skeleton 컴포넌트 추가 (#145)
513
+ - `928e01e` cssvar 자동완성 설정 보완 (#146)
514
+ - `fcd4576` ambient와 continuous 모션 계약 분리 (#147)
515
+ - `299376a` 모달 내비게이션 스냅 및 스크롤 안정화 (#148)
516
+ - `bf54089` 논리 방향 contract 정리 (#149)
517
+ <!-- generated:end -->
518
+
519
+ ### Minor Changes
520
+
521
+ - dbe4c71: Skeleton 컴포넌트를 추가합니다.
522
+
523
+ Migration Notes
524
+ - 신규 `Skeleton` export를 사용할 수 있습니다.
525
+ - `data-oc-component="skeleton"` 및 `data-oc-part="fill"` selector contract가 추가됩니다.
526
+
527
+ - bf54089: 방향성 spacing 및 alignment contract를 logical direction 기준으로 정리합니다.
528
+
529
+ Migration Notes
530
+ - `ActionArea` CSS 변수명이 logical direction으로 변경됩니다.
531
+ - `--oc-action-area-padding-x` -> `--oc-action-area-padding-inline`
532
+ - `--oc-action-area-padding-y` -> `--oc-action-area-padding-block`
533
+ - `--oc-action-area-padding-top` -> `--oc-action-area-padding-block-start`
534
+ - `--oc-action-area-padding-bottom` -> `--oc-action-area-padding-block-end`
535
+ - `ActionAreaLayout` CSS 변수명이 logical direction으로 변경됩니다.
536
+ - `--oc-action-area-layout-action-area-padding-y` -> `--oc-action-area-layout-action-area-padding-block`
537
+ - `--oc-action-area-layout-body-padding-bottom` -> `--oc-action-area-layout-body-padding-block-end`
538
+ - `Modal` CSS 변수명이 logical direction으로 변경됩니다.
539
+ - `--oc-modal-bottom-top-clearance` -> `--oc-modal-sheet-block-start-clearance`
540
+ - `--oc-modal-padding-x` -> `--oc-modal-padding-inline`
541
+ - `--oc-modal-padding-y` -> `--oc-modal-padding-block`
542
+ - `--oc-modal-header-padding-x` -> `--oc-modal-header-padding-inline`
543
+ - `--oc-modal-header-padding-y` -> `--oc-modal-header-padding-block`
544
+ - `--oc-modal-container-padding-x` -> `--oc-modal-container-padding-inline`
545
+ - `--oc-modal-container-padding-y` -> `--oc-modal-container-padding-block`
546
+ - `--oc-modal-container-padding-top` -> `--oc-modal-container-padding-block-start`
547
+ - `--oc-modal-container-padding-bottom` -> `--oc-modal-container-padding-block-end`
548
+ - `--oc-modal-footer-padding-x` -> `--oc-modal-footer-padding-inline`
549
+ - `--oc-modal-footer-padding-y` -> `--oc-modal-footer-padding-block`
550
+ - safe-area section padding CSS 변수명이 logical direction으로 변경됩니다.
551
+ - `--oc-space-section-padding-viewport-x-safe-left` -> `--oc-space-section-padding-viewport-inline-safe-start`
552
+ - `--oc-space-section-padding-viewport-x-safe-right` -> `--oc-space-section-padding-viewport-inline-safe-end`
553
+ - `--oc-space-section-padding-viewport-y-safe-top` -> `--oc-space-section-padding-viewport-block-safe-start`
554
+ - `--oc-space-section-padding-viewport-y-safe-bottom` -> `--oc-space-section-padding-viewport-block-safe-end`
555
+ - `Skeleton`의 `align` prop 값이 `left`/`right`에서 `start`/`end`로 변경됩니다. `center`는 유지됩니다.
556
+
557
+ - 299376a: ModalNavigationSection 컴포넌트를 추가합니다.
558
+
559
+ Migration Notes
560
+ - 신규 `ModalNavigationSection` export와 `Modal.NavigationSection` compound를 사용할 수 있습니다.
561
+ - `data-oc-component="modal-navigation-section"`, `modal-navigation`, `modal-navigation-panel` selector contract가 추가됩니다.
562
+ - collapsed 상태에서 panel은 `aria-hidden` 및 `inert`로 비활성화됩니다.
563
+ - snapped popup은 `drag="handle"`에서도 handle 기반 9방향 snap을 사용할 수 있습니다.
564
+ - snapped popup drag dismiss는 현재 snap 위치의 top, bottom, center-row 기준을 따릅니다.
565
+
566
+ ### Patch Changes
567
+
568
+ - fcd4576: ambient motion timing을 ease-in-out로 조정하고 continuous motion intent를 추가합니다.
569
+
570
+ Migration Notes
571
+ - `--oc-motion-timing-ambient` 기본값이 `ease-in-out`로 변경됩니다.
572
+ - spinner 회전, progress sweep, marquee처럼 일정 속도 반복이 필요한 motion은 신규 `continuous` intent와 `--oc-motion-duration-continuous`, `--oc-motion-timing-continuous` token을 사용합니다.
573
+
574
+ - dd8ac62: Cell과 Accordion divider border-color feedback transition을 공통 surface contract로 정리하고, touch active 상태에서도 divider hide feedback이 적용되도록 수정합니다.
575
+
576
+ Migration Notes
577
+ - 없음
578
+
579
+ - dd8ac62: Cell과 Accordion divider border-color feedback duration을 짧게 조정합니다.
580
+
581
+ Migration Notes
582
+ - 없음
583
+
584
+ - 928e01e: VS Code CSS variable 자동완성 설정에서 generated token index 단일 사용, node_modules 기본 ignore 해제, `phoenisx.cssvar` trigger 사용법, completion popup 표시 설정 안내를 추가합니다.
585
+
586
+ Migration Notes
587
+ - `phoenisx.cssvar` 확장을 사용하는 consumer는 `.vscode/settings.json`의 `cssvar.files`에 `./node_modules/@orioncactuscorp/ui/dist/vscode/oc-ui-vars.css`를 추가할 때, `cssvar.ignore`에서 `**/node_modules/**` 제외를 제거해야 설치된 oc-ui token index를 읽을 수 있습니다.
588
+ - `@orioncactuscorp/ui/scss/foundations/*` source file은 `color.theme.light.scss`와 `color.theme.dark.scss`처럼 같은 semantic token 이름을 theme별 값으로 다시 선언하므로, 자동완성 설정에는 generated token index만 추가해야 합니다.
589
+ - oc-ui source repository에서는 compiled `styles.css`, `foundations.css`, per-foundation CSS, raw foundation source를 `cssvar.ignore`에 두어 generated token index와 중복 스캔되지 않게 합니다.
590
+ - `phoenisx.cssvar` completion은 빈 CSS value 위치가 아니라 `padding: --` 또는 `padding: var(--`처럼 `--` token을 입력했을 때 표시됩니다.
591
+ - VS Code Insiders 또는 Copilot inline suggestion 환경에서 completion popup 대신 회색 inline suggestion만 보이면 `editor.quickSuggestions`, `editor.suggestOnTriggerCharacters`, `editor.inlineSuggest.suppressSuggestions`를 함께 설정해야 합니다.
592
+
593
+ - 8fd7fa2: VS Code CSS variable 자동완성 설정 문서를 보완합니다.
594
+
595
+ Migration Notes
596
+ - `phoenisx.cssvar` 확장을 사용하는 consumer는 `.vscode/settings.json`의 `cssvar.files`에 `./node_modules/@orioncactuscorp/ui/dist/vscode/oc-ui-vars.css`를 추가하면 설치된 oc-ui 버전의 foundation `--oc-*` token 자동완성을 사용할 수 있습니다.
597
+
598
+ - 479eeac: IconButton, BackgroundIconButton, TextButton, Badge의 disabled 상태에서 active/focus/hover feedback이 노출되지 않도록 수정하고 disabled 전환을 feedback motion으로 맞춥니다.
599
+
600
+ Migration Notes
601
+ - 없음
602
+
603
+ - 310a737: Menu z-index 기본값을 foundation z-index 토큰으로 정리하고 `placement` 기반 12방향 배치 API를 추가합니다.
604
+
605
+ Migration Notes
606
+ - Menu가 더 이상 정의되지 않은 `--oc-z-index-floating` 변수나 숫자 fallback에 의존하지 않습니다.
607
+ - 특수 stacking context에서 Menu layer 조정이 필요하면 `--oc-menu-z-index`를 사용합니다.
608
+ - `MenuContent`의 `placement` prop으로 `topLeft`, `rightTop`, `bottomRight` 등 12방향 선호 배치를 지정할 수 있습니다.
609
+
610
+ - 299376a: Fixed ModalNavigationSection이 접힐 때 popup surface 높이가 콘텐츠 자연 높이로 커지지 않도록 보정하고, fixed 및 max-height에 닿은 hug 상태에서 panel content가 정상 스크롤되도록 개선합니다. 또한 기본 disclosure indicator를 Accordion과 공통화하고 Safari에서 custom-size SVG가 0 크기로 렌더링되지 않도록 보정합니다. top/bottom popup snap 상태에서는 surface 높이가 바뀌어도 해당 edge를 기준으로 유지되도록 개선합니다. ModalNavigationSection panel scroll 영역은 ModalBody와 동일하게 ScrollArea를 사용하도록 정렬합니다.
611
+
612
+ Migration Notes
613
+ - 없음
614
+
615
+ - 299376a: ModalNavigationSection이 있는 snapped popup의 navigation row drag와 top/bottom collapse anchoring을 보정합니다.
616
+
617
+ Migration Notes
618
+ - 없음
619
+
620
+ ### Migration Notes
621
+
622
+ - `ActionArea`, `ActionAreaLayout`, `Modal`, safe-area section padding CSS 변수명이 logical direction 기준으로 변경됩니다.
623
+ - `Skeleton`의 `align` prop 값이 `left`/`right`에서 `start`/`end`로 변경됩니다. `center`는 유지됩니다.
624
+ - 신규 `Skeleton`, `ModalNavigationSection`, `Modal.NavigationSection` export를 사용할 수 있습니다.
625
+ - `Skeleton`, `ModalNavigationSection` 관련 `data-oc-*` selector contract가 추가됩니다.
626
+ - `--oc-motion-timing-ambient` 기본값이 `ease-in-out`로 변경되며, 일정 속도 반복 motion에는 신규 `continuous` intent와 관련 token을 사용합니다.
627
+ - Menu가 정의되지 않은 `--oc-z-index-floating` 변수나 숫자 fallback에 의존하지 않습니다. 특수 stacking context 조정은 `--oc-menu-z-index`를 사용합니다.
628
+ - `MenuContent`의 `placement` prop으로 12방향 선호 배치를 지정할 수 있습니다.
629
+ - VS Code `phoenisx.cssvar` 자동완성 설정에서 generated token index를 사용하고, `cssvar.ignore`의 `**/node_modules/**` 제외를 제거해야 설치된 oc-ui token index를 읽을 수 있습니다.
630
+
631
+ ## 1.6.0
632
+
633
+ ### Changes
634
+
635
+ <!-- generated:start -->
636
+
637
+ _Commit range: `@orioncactuscorp/ui@1.5.1..HEAD`_
638
+
639
+ #### Breaking Changes
640
+
641
+ - `7d6e60f` ActionArea footer gradient 개선 (#135)
642
+
643
+ #### Other
644
+
645
+ - `c26137e` Radio 아이콘 패딩 조정 (#136)
646
+ <!-- generated:end -->
647
+
648
+ ### Minor Changes
649
+
650
+ - 7d6e60f: Modal CSS 변수 naming을 padding contract로 정리합니다.
651
+
652
+ Migration Notes
653
+ - Modal CSS 변수 `--oc-modal-space-x`, `--oc-modal-space-y`를 `--oc-modal-padding-x`, `--oc-modal-padding-y`로 변경
654
+ - Modal CSS 변수 `--oc-modal-header-space-x`, `--oc-modal-header-space-y`를 `--oc-modal-header-padding-x`, `--oc-modal-header-padding-y`로 변경
655
+ - Modal CSS 변수 `--oc-modal-container-space-x`, `--oc-modal-container-space-y`, `--oc-modal-container-space-top`, `--oc-modal-container-space-bottom`을 `--oc-modal-container-padding-x`, `--oc-modal-container-padding-y`, `--oc-modal-container-padding-top`, `--oc-modal-container-padding-bottom`으로 변경
656
+ - Modal CSS 변수 `--oc-modal-footer-space-x`, `--oc-modal-footer-space-y`를 `--oc-modal-footer-padding-x`, `--oc-modal-footer-padding-y`로 변경
657
+
658
+ ### Patch Changes
659
+
660
+ - 7d6e60f: ActionArea footer gradient와 scroll body reserve를 분리합니다.
661
+
662
+ Migration Notes
663
+ - standalone ActionArea는 `background=true` 상태에서도 상단 padding을 유지함
664
+ - Modal footer와 ActionAreaLayout footer 안의 ActionArea는 상단 padding을 scroll body reserve로 이전함
665
+ - Modal footer와 ActionAreaLayout footer는 내부 ActionArea gradient를 중복 렌더링하지 않고 owner overlay로 background를 표시함
666
+ - footer overlay gradient는 ActionArea content 시작점까지 `padding-y * 2` 범위로 표시됨
667
+
668
+ - 7d6e60f: Modal과 ActionAreaLayout에서 ActionArea footer의 상단 여백 이동을 scrollable 상태에만 적용하도록 수정합니다.
669
+
670
+ Migration Notes
671
+ - 별도 마이그레이션은 필요하지 않습니다.
672
+ - 짧은 본문처럼 스크롤이 필요 없는 Modal과 ActionAreaLayout에서는 ActionArea의 기본 상단 padding이 유지됩니다.
673
+ - 스크롤 가능한 본문에서는 기존처럼 ActionArea 상단 padding을 body reserve로 이동해 footer gradient와 마지막 콘텐츠 간격을 유지합니다.
674
+
675
+ - c26137e: Radio checked icon의 SVG padding을 조정합니다.
676
+
677
+ Migration Notes
678
+ - 없음
679
+
680
+ ### Migration Notes
681
+
682
+ - Modal CSS 변수 `--oc-modal-space-x`, `--oc-modal-space-y`를 `--oc-modal-padding-x`, `--oc-modal-padding-y`로 변경
683
+ - Modal CSS 변수 `--oc-modal-header-space-x`, `--oc-modal-header-space-y`를 `--oc-modal-header-padding-x`, `--oc-modal-header-padding-y`로 변경
684
+ - Modal CSS 변수 `--oc-modal-container-space-x`, `--oc-modal-container-space-y`, `--oc-modal-container-space-top`, `--oc-modal-container-space-bottom`을 `--oc-modal-container-padding-x`, `--oc-modal-container-padding-y`, `--oc-modal-container-padding-top`, `--oc-modal-container-padding-bottom`으로 변경
685
+ - Modal CSS 변수 `--oc-modal-footer-space-x`, `--oc-modal-footer-space-y`를 `--oc-modal-footer-padding-x`, `--oc-modal-footer-padding-y`로 변경
686
+ - standalone ActionArea는 `background=true` 상태에서도 상단 padding을 유지함
687
+ - Modal footer와 ActionAreaLayout footer 안의 ActionArea는 상단 padding을 scroll body reserve로 이전함
688
+ - Modal footer와 ActionAreaLayout footer는 내부 ActionArea gradient를 중복 렌더링하지 않고 owner overlay로 background를 표시함
689
+ - footer overlay gradient는 ActionArea content 시작점까지 `padding-y * 2` 범위로 표시됨
690
+
691
+ ## 1.5.1
692
+
693
+ ### Changes
694
+
695
+ <!-- generated:start -->
696
+
697
+ _Commit range: `@orioncactuscorp/ui@1.5.0..HEAD`_
698
+
699
+ #### Other
700
+
701
+ - `9beed64` Modal 드래그 및 Storybook 동작 개선 (#131)
702
+ - `3343dcf` ActionArea 배경 패딩 안정화 (#132)
703
+ <!-- generated:end -->
704
+
705
+ ### Patch Changes
706
+
707
+ - 3343dcf: ActionArea background가 활성화될 때 상단 gradient와 content 사이에 추가 padding이 끼지 않도록 조정합니다.
708
+
709
+ Migration Notes
710
+ - ActionAreaLayout과 Modal footer 안의 ActionArea는 background 상태와 무관하게 상단 padding을 제거해 scroll-state 임계점에서 footer 높이가 흔들리지 않도록 유지함
711
+ - standalone ActionArea는 `background=true`일 때 상단 padding을 제거함
712
+
713
+ - 9beed64: Modal footer 안의 ActionArea가 md 이상에서도 footer 폭을 기본으로 꽉 채우도록 max width override를 추가합니다.
714
+
715
+ Migration Notes
716
+ - 없음
717
+
718
+ - 9beed64: Modal drag 시작 시 진행 중인 snap settle animation을 현재 위치에서 interrupt해 새 포인터/터치 입력이 즉시 제어권을 갖도록 보정합니다.
719
+
720
+ Migration Notes
721
+ - 없음
722
+
723
+ - 9beed64: Modal의 마우스 드래그 핸들 조작 중 브라우저 native text selection과 drag가 함께 시작되지 않도록 보정합니다.
724
+
725
+ Migration Notes
726
+ - 없음
727
+
728
+ ### Migration Notes
729
+
730
+ - ActionAreaLayout과 Modal footer 안의 ActionArea는 background 상태와 무관하게 상단 padding을 제거해 scroll-state 임계점에서 footer 높이가 흔들리지 않도록 유지함
731
+ - standalone ActionArea는 `background=true`일 때 상단 padding을 제거함
732
+
733
+ ## 1.5.0
734
+
735
+ ### Changes
736
+
737
+ <!-- generated:start -->
738
+
739
+ _Commit range: `@orioncactuscorp/ui@1.4.1..HEAD`_
740
+
741
+ #### Other
742
+
743
+ - `75a53da` CI self-hosted runner 전환 테스트 (#126)
744
+ - `609c21b` Fade 모션 intent 추가 (#127)
745
+ - `01bc705` Modal 반응형 스냅 전환 개선 (#128)
746
+ <!-- generated:end -->
747
+
748
+ ### Minor Changes
749
+
750
+ - 609c21b: 일반 content show/hide에 사용할 수 있는 `fade` motion intent를 추가합니다.
751
+
752
+ Migration Notes
753
+ - 새 `fade` intent는 `@include oc-motion(opacity, fade)` 형태로 사용합니다.
754
+ - `fade`는 non-spring opacity transition이며 reduced-motion에서도 짧은 opacity fade를 유지합니다.
755
+ - `--oc-motion-duration-fade`, `--oc-motion-timing-fade` token이 추가됩니다.
756
+ - 기존 `feedback`, `disclosure`, `surface`, `sheet`, `expand`, `move`, `gesture`, `ambient` intent의 동작은 변경되지 않습니다.
757
+
758
+ ### Patch Changes
759
+
760
+ - 01bc705: Modal이 bottom sheet와 snapped popup 사이를 전환할 때 bottom 전용 fill, backdrop opacity, overshoot fill inline 상태가 남지 않도록 정리합니다. hidden backdrop을 사용하는 snapped popup에서는 배경 영역 상호작용을 허용하고, bottom 전환 후 popup으로 돌아와도 마지막 snap position을 유지합니다.
761
+
762
+ Migration Notes
763
+ - 없음
764
+
765
+ ### Migration Notes
766
+
767
+ - 새 `fade` intent는 `@include oc-motion(opacity, fade)` 형태로 사용합니다.
768
+ - `fade`는 non-spring opacity transition이며 reduced-motion에서도 짧은 opacity fade를 유지합니다.
769
+ - `--oc-motion-duration-fade`, `--oc-motion-timing-fade` token이 추가됩니다.
770
+ - 기존 `feedback`, `disclosure`, `surface`, `sheet`, `expand`, `move`, `gesture`, `ambient` intent의 동작은 변경되지 않습니다.
771
+
772
+ ## 1.4.1
773
+
774
+ ### Changes
775
+
776
+ <!-- generated:start -->
777
+
778
+ _Commit range: `@orioncactuscorp/ui@1.4.0..HEAD`_
779
+
780
+ #### Fixes
781
+
782
+ - `3f67339` fix(modal): remove bottom surface opacity motion (#123)
783
+
784
+ #### Other
785
+
786
+ - `62bf9cc` ActionAreaLayout footer overlay 개선 (#124)
787
+ <!-- generated:end -->
788
+
789
+ ### Patch Changes
790
+
791
+ - 62bf9cc: ActionAreaLayout footer gradient를 layout-owned overlay로 전환해 스크롤 끝단에서 opacity와 scaleY로 자연스럽게 사라지도록 개선합니다. md 이상에서 ActionArea actions slot의 최대 너비를 content width로 제한합니다.
792
+
793
+ Migration Notes
794
+ - 기존 ActionAreaLayout 사용처의 API 변경은 없음
795
+ - `--oc-action-area-layout-gradient-overlap`, `--oc-action-area-layout-gradient-size`, `--oc-action-area-layout-background-color`로 footer overlay 범위와 배경색 조정 가능
796
+ - `--oc-action-area-container-max-width`로 md 이상 actions slot 최대 너비 조정 가능
797
+
798
+ - 3f67339: Modal bottom variant의 surface motion에서 opacity fade를 제거하고 translate motion만 유지합니다.
799
+
800
+ ### Migration Notes
801
+
802
+ - 없음
803
+
804
+ ## 1.4.0
805
+
806
+ ### Changes
807
+
808
+ <!-- generated:start -->
809
+
810
+ _Commit range: `@orioncactuscorp/ui@1.3.0..HEAD`_
811
+
812
+ #### Features
813
+
814
+ - `3c2da27` feat(ui): support link icon buttons
815
+
816
+ #### Fixes
817
+
818
+ - `0f245d6` fix(button): align loading indicator to content height (#120)
819
+
820
+ #### Documentation
821
+
822
+ - `d02538f` docs(agents): clarify compound composition boundary
823
+
824
+ #### Other
825
+
826
+ - `e66ca98` ActionArea 레이아웃 추가 (#121)
827
+ <!-- generated:end -->
828
+
829
+ ### Minor Changes
830
+
831
+ - e66ca98: ActionAreaLayout을 추가해 스크롤 본문과 하단 ActionArea footer를 하나의 layout owner에서 구성할 수 있도록 합니다.
832
+
833
+ Migration Notes
834
+ - 신규 opt-in API이므로 기존 사용처 변경은 필요 없음
835
+
836
+ - 3c2da27: IconButton과 BackgroundIconButton이 `href`를 받으면 anchor로 렌더링하도록 지원합니다.
837
+
838
+ Migration Notes
839
+ - 없음
840
+
841
+ ### Patch Changes
842
+
843
+ - 0f245d6: Button 로딩 인디케이터가 label/content 영역 기준으로 정렬되도록 수정하고, Loading 내부 SVG part를 `indicator`로 변경해 Button icon slot과 충돌하지 않도록 개선합니다.
844
+
845
+ ### Migration Notes
846
+ - `Loading` 내부 SVG를 selector로 커스터마이즈했다면 `[data-oc-part='icon']` 대신 `[data-oc-part='indicator']`를 사용하세요.
847
+
848
+ ### Migration Notes
849
+
850
+ - `Loading` 내부 SVG를 selector로 커스터마이즈했다면 `[data-oc-part='icon']` 대신 `[data-oc-part='indicator']`를 사용하세요.
851
+
852
+ ## 1.3.0
853
+
854
+ ### Changes
855
+
856
+ <!-- generated:start -->
857
+
858
+ _Commit range: `@orioncactuscorp/ui@1.2.0..HEAD`_
859
+
860
+ #### Features
861
+
862
+ - `5f154f7` feat(motion): add extra bounce override (#106)
863
+ - `9ff2f9b` feat(storybook): add foundation profile toolbar
864
+
865
+ #### Fixes
866
+
867
+ - `0922662` fix(modal): keep bottom fill in sheet opacity layer
868
+ - `7cf2bfe` fix(select): apply icon styling to indicator
869
+ - `1eda9f5` fix(modal): keep close button visible by default
870
+ - `a99a706` fix(ui): make row interactions self-driven
871
+ - `f884992` fix(ui): default row dividers to neutral
872
+ - `1910da6` fix(ui): preserve cell activation through interaction layer
873
+ - `bf96c94` fix(ui): avoid duplicate cell control activation
874
+
875
+ #### Documentation
876
+
877
+ - `908e824` docs(agent): update figma agent setup guidance
878
+ - `2069560` docs(ui): rely on cell default divider in stories
879
+
880
+ #### Other
881
+
882
+ - `2916a70` Motion phase 스토리 추가 (#100)
883
+ - `4da6f5f` motion factor 토큰명 정리 (#102)
884
+ - `9d67d6f` Atomic radius factor 추가 (#103)
885
+ - `858fe7b` Figma foundation sync 문서화 (#105)
886
+ - `eae3c17` Modal 레이어 계약 정리 (#107)
887
+ - `c0f6de5` Accordion summary 표면 계약 개선 (#108)
888
+ - `63b2615` 모션 시맨틱 계약 정리 (#109)
889
+ - `952bc13` 모션 reveal 계약 제거 (#110)
890
+ - `a0c700d` Badge 인터랙션 렌더링 추가 (#111)
891
+ - `510ed36` 선택 컨트롤 크기 계약 정리 (#112)
892
+ - `8bdd955` ActionArea priority 계약 정리 (#113)
893
+ - `f6dc9c9` Switch RTL 대응 및 라벨 정렬 개선 (#114)
894
+ - `42dab32` 모달 BottomSheet 러버밴드 보정 (#115)
895
+ - `3de755e` Modal 여백 및 hidden backdrop 닫힘 정책 개선 (#116)
896
+ - `4849f41` 아이콘 생성 및 Figma 동기화 도구 개선 (#117)
897
+ <!-- generated:end -->
898
+
899
+ ### Minor Changes
900
+
901
+ - 8bdd955: ActionAreaButton의 action hierarchy contract를 `priority` prop으로 정리하고 동등 선택지를 위한 `equal` priority를 추가합니다.
902
+
903
+ Migration Notes
904
+ - `ActionAreaButton variant` prop 제거, `priority` prop으로 교체 필요
905
+ - `ActionAreaButton variant="main"`은 `priority="main"`으로 변경 필요
906
+ - `ActionAreaButton variant="alternative"`는 `priority="alternative"`로 변경 필요
907
+ - `ActionAreaButton variant="sub"`는 `priority="sub"`로 변경 필요
908
+ - 동등한 선택지를 표시할 때는 `priority="equal"` 사용 필요
909
+ - `data-oc-action-area-button-variant` selector 제거, `data-oc-action-area-button-priority` selector 사용 필요
910
+ - `ActionAreaButton priority="alternative"`는 기존과 동일하게 outlined secondary Button으로 렌더링됨
911
+ - `ActionAreaButton priority="equal"`은 outlined primary Button으로 렌더링됨
912
+ - `ActionArea`는 strong에서 위→아래 `main` → `equal` → `alternative` → `sub`, neutral/compact에서 inline-start→inline-end 기준 `sub` → `alternative` → `equal` → `main` 순서로 action을 정렬함
913
+ - `Button appearance="outlined" variant="secondary"`의 content 색상은 primary를 유지하고 interaction만 label-normal 기준으로 변경됨
914
+
915
+ - 9d67d6f: atomic radius token과 component-local radius 값을 조정할 수 있는 radius factor를 추가합니다.
916
+
917
+ Migration Notes
918
+ - `--oc-atomic-radius-factor` token 추가
919
+ - `--oc-atomic-radius-*` token이 radius factor를 반영하도록 변경
920
+ - `oc-radius($radius, $factor-token)` Sass helper 추가
921
+ - `Badge`, `Menu`, `Alert`, `Tooltip`, `TextButton`, `Checkbox`의 component-local radius 기본값이 radius factor를 반영하도록 변경
922
+ - `BackgroundIconButton` interaction clip radius가 `--oc-atomic-radius-max`를 반영하도록 변경
923
+ - 기존 `--oc-atomic-radius-*` token 이름은 유지되며 consumer rename은 필요 없음
924
+ - consumer가 radius를 전역으로 줄이거나 제거해야 하면 `--oc-atomic-radius-factor`를 override
925
+
926
+ - 5f154f7: oc-motion의 spring-backed motion에서 extra bounce override를 지원합니다.
927
+
928
+ Migration Notes
929
+ - SCSS `oc-motion(...)`과 `@include oc-motion(...)`에 `$extra-bounce` 인자 추가
930
+ - TS runtime `ocMotion.resolve(...)`와 `MotionExpand`에 `extraBounce` option 추가
931
+ - non-spring motion에서 extra bounce override를 넘기면 에러 발생
932
+
933
+ - 4da6f5f: motion과 typo의 runtime multiplier token vocabulary를 `factor` 기준으로 정리합니다.
934
+
935
+ Migration Notes
936
+ - `--oc-typo-scale`을 `--oc-typo-size-factor`로 변경
937
+ - `--oc-motion-duration-scale*`을 `--oc-motion-duration-factor*`로 변경
938
+ - `--oc-motion-scale*` amplitude token을 `--oc-motion-scale-factor*`로 변경
939
+ - `--oc-motion-distance-scale*`을 `--oc-motion-distance-factor*`로 변경
940
+ - SCSS `oc-motion(...)`, `oc-motion-duration(...)`의 `$duration-scale` 인자를 `$duration-factor`로 변경
941
+ - SCSS `oc-motion-duration(...)`의 `$duration-scale-token` 인자를 `$duration-factor-token`으로 변경
942
+ - SCSS `oc-motion-scale(...)`의 `$scale-token` 인자를 `$scale-factor-token`으로 변경
943
+ - SCSS `oc-motion-distance(...)`의 `$distance-token` 인자를 `$distance-factor-token`으로 변경
944
+ - React/runtime motion option과 result의 `durationScale` field를 `durationFactor`로 변경
945
+ - React/runtime motion result의 `paceScale` field를 `paceFactor`로 변경
946
+ - 기존 `scale` token alias는 제공하지 않음
947
+
948
+ - 63b2615: motion intent vocabulary를 `disclosure`, `surface`, `sheet`, `expand`, `release` 중심으로 확장하고 Menu, Tooltip, Modal, Accordion motion contract를 새 intent에 맞게 정리합니다.
949
+
950
+ Migration Notes
951
+ - 기존 `reveal` motion intent는 제거됩니다. Menu/Tooltip은 `disclosure`, Popup Modal은 `surface`, Bottom Modal은 `sheet`, layout expand motion은 `expand`를 사용해야 합니다.
952
+ - `MotionReveal` runtime primitive는 `MotionExpand`로 이름이 변경됩니다. 기본 `data-oc-component`도 `motion-reveal`에서 `motion-expand`로 변경됩니다.
953
+ - `--oc-motion-duration-reveal`, `--oc-motion-duration-reveal-exit`, `--oc-motion-timing-reveal`, `--oc-motion-timing-reveal-exit` token은 제거됩니다.
954
+ - `--oc-motion-scale-factor-reveal`, `--oc-motion-distance-factor-reveal` token은 `--oc-motion-scale-factor-spatial`, `--oc-motion-distance-factor-spatial`로 변경됩니다.
955
+ - Menu/Tooltip은 `disclosure`, Popup Modal은 `surface`, Bottom Modal은 `sheet`, Accordion은 `expand` motion intent를 사용합니다.
956
+ - Menu/Tooltip의 `disclosure exit`은 `0.14s`와 `cubic-bezier(0.8, 0, 1, 1)` 기준의 non-spring accelerate motion을 사용합니다.
957
+ - Popup Modal의 surface exit은 smooth `0.24` 기준입니다.
958
+ - Bottom Modal의 sheet enter는 smooth `0.26`, sheet exit/release는 smooth `0.33` 기준입니다.
959
+ - Popup drag release는 `gesture release`, Bottom drag release는 `sheet release`를 사용합니다.
960
+ - Reduced-motion에서 Accordion chevron은 상태 회전을 보존하고 panel content는 opacity fade를 유지하며, Loading은 fade와 360도 회전만 유지합니다.
961
+
962
+ ### Patch Changes
963
+
964
+ - c0f6de5: Cell item surface SCSS contract를 분리해 Accordion summary와 공유하고, Accordion hover divider 및 details opacity expand motion을 Cell/oc-motion 정책에 맞춥니다.
965
+
966
+ Migration Notes
967
+ - 없음
968
+
969
+ - a0c700d: Badge에 self-driven Interaction을 켤 수 있는 `interactive` prop과 link rendering을 추가합니다.
970
+
971
+ Migration Notes
972
+ - 기존 Badge 사용에는 영향 없음
973
+ - command 역할의 Badge는 `interactive` prop으로 button 렌더링 가능
974
+ - navigation 역할의 Badge는 `href` prop으로 anchor 렌더링 가능
975
+
976
+ - a99a706: Cell item과 Accordion summary interaction을 self-driven mode로 전환해 fillWidth=false에서 확장된 interaction 영역도 hover/active 상태를 받을 수 있게 합니다.
977
+
978
+ Migration Notes
979
+ - 없음
980
+
981
+ - bf96c94: Cell 안의 Checkbox, Radio, Switch control surface 클릭이 native label activation과 Cell proxy activation으로 중복 처리되지 않도록 수정합니다.
982
+
983
+ Migration Notes
984
+ - 없음
985
+
986
+ - 0922662: Modal bottom sheet의 rubber-band fill layer가 닫힘 opacity motion과 함께 합성되도록 수정합니다.
987
+
988
+ Migration Notes
989
+ - 없음
990
+
991
+ - 42dab32: Modal BottomSheet의 rubber-band 감쇠 기준에 viewport 비율 cap을 적용합니다.
992
+
993
+ Migration Notes
994
+ - 없음
995
+
996
+ - 1eda9f5: Modal Header의 기본 닫기 버튼이 viewport와 placement에 관계없이 표시되도록 변경합니다.
997
+
998
+ Migration Notes
999
+ - `ModalHeader`의 `closeButton` 기본값이 실제 UI에서도 일관되게 반영됨
1000
+ - 닫기 버튼을 숨겨야 하는 경우 `closeButton={false}`를 명시하세요.
1001
+
1002
+ - 3de755e: Modal popup에서 시각적 backdrop이 hidden 상태일 때 배경 클릭으로 닫히지 않도록 변경합니다.
1003
+
1004
+ Migration Notes
1005
+ - `ModalContent`의 resolved backdrop이 `hidden`이면 backdrop click과 outside press dismissal이 무시됨
1006
+ - 배경 클릭으로 닫히는 popup이 필요하면 `backdrop="visible"`을 명시하세요.
1007
+
1008
+ - eae3c17: Modal.Content의 public CSS variable contract가 motion/layout layer까지 도달하도록 수정하고, Modal surface focus ring 기본 표시를 제거합니다.
1009
+
1010
+ Migration Notes
1011
+ - `Modal.Content` `className`은 motion layer, visual surface layer, bottom fill layer에 함께 적용됨
1012
+ - `Modal.Content` `style`의 CSS custom property는 motion layer와 bottom fill layer에도 전달되어 `--oc-modal-bottom-top-clearance`, `--oc-modal-width` 같은 layout contract override 가능
1013
+ - `--oc-modal-bottom-top-clearance` 기본값을 `3rem`으로 변경하고 consumer override 값을 그대로 사용
1014
+ - `initialFocus="content"` 사용 시 Modal/Alert surface 전체 focus ring은 기본 표시되지 않음
1015
+
1016
+ - f884992: Cell과 Accordion의 기본 divider 색상을 neutral로 맞춥니다.
1017
+
1018
+ Migration Notes
1019
+ - 기본 Cell, Accordion divider가 `alternative`에서 `neutral`로 변경됨
1020
+
1021
+ - 7cf2bfe: Select indicator 아이콘을 ChevronUpDown으로 바꾸고, 아이콘 슬롯과 맞는 padding 및 sizing contract를 사용하도록 정리합니다.
1022
+
1023
+ Migration Notes
1024
+ - 없음
1025
+
1026
+ - 510ed36: Checkbox, Radio, CheckMark에 `small`/`medium` size contract를 정렬합니다.
1027
+
1028
+ Migration Notes
1029
+ - `Checkbox`, `Radio`, `CheckMark`의 기본 size는 `medium`으로 유지됨
1030
+ - root export에서 `CheckboxSize`, `RadioSize`, `CheckMarkSize` type을 제공함
1031
+ - `small`은 `body2` 높이 기준, `medium`은 `body1` 높이 기준으로 control 크기와 label typography를 정렬함
1032
+ - selection control container padding을 `0.125em`으로 통일함
1033
+ - 작은 selection control이 필요한 consumer는 `size="small"` 지정 필요
1034
+
1035
+ - f6dc9c9: Switch의 checked thumb 이동을 RTL direction에서 반대로 적용합니다.
1036
+
1037
+ Migration Notes
1038
+ - `dir="rtl"` 환경에서 `Switch` checked thumb가 inline-start 방향으로 이동함
1039
+ - public API 변경 없음
1040
+
1041
+ - f6dc9c9: Switch 라벨 typography와 content alignment를 SelectionControl 공통 size contract에 맞춥니다.
1042
+
1043
+ Migration Notes
1044
+ - `Switch size="medium"` 라벨은 body1 기준, `size="small"` 라벨은 body2 기준으로 정렬됨
1045
+ - public API 변경 없음
1046
+
1047
+ - Updated dependencies [4849f41]
1048
+ - Updated dependencies [4849f41]
1049
+ - @orioncactuscorp/icons@1.3.0
1050
+
1051
+ ### Migration Notes
1052
+
1053
+ - `ActionAreaButton variant` prop 제거, `priority` prop으로 교체 필요
1054
+ - `data-oc-action-area-button-variant` selector 제거, `data-oc-action-area-button-priority` selector 사용 필요
1055
+ - `--oc-atomic-radius-factor` token 추가, `--oc-atomic-radius-*` token은 radius factor를 반영하도록 변경
1056
+ - SCSS `oc-radius($radius, $factor-token)` helper 추가
1057
+ - SCSS `oc-motion(...)`, `@include oc-motion(...)`, React/runtime motion API에 extra bounce 및 factor 기반 option 추가
1058
+ - `--oc-typo-scale`은 `--oc-typo-size-factor`로 변경
1059
+ - `--oc-motion-duration-scale*`, `--oc-motion-scale*`, `--oc-motion-distance-scale*` token은 각각 `factor` 기준 이름으로 변경
1060
+ - 기존 `reveal` motion intent와 `MotionReveal` runtime primitive 제거, `disclosure`, `surface`, `sheet`, `expand`, `MotionExpand` 사용 필요
1061
+ - reveal 관련 motion duration/timing/scale/distance token 제거 또는 spatial/factor 기준 token으로 변경
1062
+ - `Badge`는 `interactive` prop과 `href` prop으로 interactive rendering 지원
1063
+ - `ModalHeader` 닫기 버튼 기본 표시가 실제 UI에 일관되게 반영되며 숨길 때는 `closeButton={false}` 명시 필요
1064
+ - `ModalContent`의 resolved backdrop이 `hidden`이면 backdrop click과 outside press dismissal이 무시됨
1065
+ - `Modal.Content` `className`/`style`은 motion layer, visual surface layer, bottom fill layer에 함께 적용됨
1066
+ - `--oc-modal-bottom-top-clearance` 기본값을 `3rem`으로 변경
1067
+ - 기본 Cell, Accordion divider가 `alternative`에서 `neutral`로 변경
1068
+ - `Checkbox`, `Radio`, `CheckMark`에 `small`/`medium` size contract 정렬 및 관련 size type root export 추가
1069
+ - `Switch`는 `dir="rtl"` 환경에서 checked thumb 이동 방향을 반대로 적용
1070
+ - `Switch size="medium"` 라벨은 body1 기준, `size="small"` 라벨은 body2 기준으로 정렬됨
1071
+
1072
+ ## 1.2.0
1073
+
1074
+ ### Changes
1075
+
1076
+ <!-- generated:start -->
1077
+
1078
+ _Commit range: `@orioncactuscorp/ui@1.1.0..HEAD`_
1079
+
1080
+ #### Fixes
1081
+
1082
+ - `7722704` fix(storybook): exclude library plugins from static build
1083
+
1084
+ #### Documentation
1085
+
1086
+ - `b43c650` docs(agent): document release workflow skill
1087
+
1088
+ #### Other
1089
+
1090
+ - `8555c47` SCSS inset border helper 추가 (#89)
1091
+ - `7a359c1` montage-icons upstream sync command 추가 (#90)
1092
+ - `4a9e6e4` Storybook 테마와 모션 툴바 개선 (#91)
1093
+ <!-- generated:end -->
1094
+
1095
+ ### Minor Changes
1096
+
1097
+ - 8555c47: SCSS inset border helper를 `oc-border`로 교체합니다.
1098
+
1099
+ ### Migration Notes
1100
+ - `inset-stroke` mixin을 제거합니다.
1101
+ - 기존 `@include inset-stroke(...)` 사용처는 `@include oc-border(...)`로 변경해야 합니다.
1102
+ - `@include oc-border`는 `1px currentColor` inset border를 출력하고, `@include oc-border(black)`은 `1px black` inset border를 출력합니다.
1103
+ - `1.5px`, `2.5px`, `3.5px` 같은 half-pixel px inset border는 WebKit/DPR 보정을 적용합니다.
1104
+
1105
+ ### Migration Notes
1106
+
1107
+ - `inset-stroke` mixin을 제거합니다.
1108
+ - 기존 `@include inset-stroke(...)` 사용처는 `@include oc-border(...)`로 변경해야 합니다.
1109
+ - `@include oc-border`는 `1px currentColor` inset border를 출력하고, `@include oc-border(black)`은 `1px black` inset border를 출력합니다.
1110
+ - `1.5px`, `2.5px`, `3.5px` 같은 half-pixel px inset border는 WebKit/DPR 보정을 적용합니다.
1111
+
1112
+ ## 1.1.0
1113
+
1114
+ ### Changes
1115
+
1116
+ <!-- generated:start -->
1117
+
1118
+ _Commit range: `@orioncactuscorp/ui@1.0.0..HEAD`_
1119
+
1120
+ #### Features
1121
+
1122
+ - `68e4f3a` feat(alert): add content message props (#83)
1123
+
1124
+ #### Fixes
1125
+
1126
+ - `3b84e25` fix(release): avoid existing tag output
1127
+
1128
+ #### Documentation
1129
+
1130
+ - `50d960c` docs: refine public package documentation
1131
+ - `14a7162` docs(ui): document foundation customization
1132
+ - `89effa7` docs(ui): split install commands by manager
1133
+ - `ae16b1c` docs(ui): expand motion documentation
1134
+ - `d7d9802` docs(ui): simplify runtime motion example
1135
+
1136
+ #### Maintenance
1137
+
1138
+ - `db95a78` chore(release): fix public release tag creation
1139
+
1140
+ #### Other
1141
+
1142
+ - `81de07e` npm OIDC 배포 전환 (#79)
1143
+ - `8e6fbbd` Field control stroke paint 보정 (#82)
1144
+ - `fe0db9d` Modal 드래그 정착 CSS fallback 제거 (#84)
1145
+ - `cb2f8da` RSC 클라이언트 경계 보존 (#85)
1146
+ - `5174d57` 내부 visual layer stacking 격리 (#86)
1147
+ - `17e6057` Modal 그림자 및 backdrop 정책 개선 (#87)
1148
+ <!-- generated:end -->
1149
+
1150
+ ### Minor Changes
1151
+
1152
+ - 17e6057: atomic foundation에 Figma shadow effect style과 대응되는 shadow token을 추가합니다.
1153
+
1154
+ Migration Notes
1155
+ - 신규 shadow token을 사용할 수 있으며, 기존 shadow token과 component API는 유지됩니다.
1156
+
1157
+ - 17e6057: ModalContent에 backdrop 표시 정책을 추가하고, snapped popup과 peeked bottom sheet의 auto backdrop을 숨김 처리합니다.
1158
+
1159
+ Migration Notes
1160
+ - `ModalContent`에서 backdrop 표시를 직접 고정해야 하는 경우 새 backdrop policy를 명시할 수 있습니다.
1161
+ - snapped popup과 peeked bottom sheet에서 auto backdrop에 의존하던 consumer style은 더 이상 표시되지 않습니다.
1162
+
1163
+ ### Patch Changes
1164
+
1165
+ - 68e4f3a: AlertContent에 `heading`, `description` prop 기반 메시지 API를 추가합니다.
1166
+
1167
+ Migration Notes
1168
+ - 기존 AlertHeading, AlertDescription compound API는 유지됩니다.
1169
+ - 정형 Alert 메시지는 AlertContent의 `heading`, `description` prop으로 작성할 수 있습니다.
1170
+
1171
+ - 8e6fbbd: Field control surface에 stacking context 격리를 추가해 Modal body 스크롤 중 TextInput, TextArea, Select stroke가 Modal header 위로 paint되지 않도록 보정합니다.
1172
+
1173
+ Migration Notes
1174
+ - consumer repo에서 Modal body scope에 추가했던 Field control isolation 우회 스타일은 제거할 수 있습니다.
1175
+
1176
+ - cb2f8da: React Server Components 환경에서 root barrel import가 interactive component의 client boundary를 잃지 않도록 `use client` directive 보존과 RSC boundary 검증을 추가합니다.
1177
+
1178
+ Migration Notes
1179
+ - Next App Router Server Component에서 `@orioncactuscorp/ui` root barrel로 interactive component를 import하는 경우 leaf client boundary가 유지됩니다.
1180
+ - Server Component에서 `onClick` 같은 function prop을 interactive component에 직접 전달하는 사용 방식은 React Server Components 제약상 Client Component로 분리해야 합니다.
1181
+
1182
+ - 5174d57: Badge, ActionArea, Checkbox, Radio, CheckMark의 내부 visual layer에 stacking context 격리를 추가해 외부 chrome과 z-index가 경쟁하지 않도록 보정합니다.
1183
+
1184
+ Migration Notes
1185
+ - 없음
1186
+
1187
+ ### Migration Notes
1188
+
1189
+ - `ModalContent`에서 backdrop 표시를 직접 고정해야 하는 경우 새 backdrop policy를 명시할 수 있습니다.
1190
+ - snapped popup과 peeked bottom sheet에서 auto backdrop에 의존하던 consumer style은 더 이상 표시되지 않습니다.
1191
+ - consumer repo에서 Modal body scope에 추가했던 Field control isolation 우회 스타일은 제거할 수 있습니다.
1192
+ - Next App Router Server Component에서 `@orioncactuscorp/ui` root barrel로 interactive component를 import하는 경우 leaf client boundary가 유지됩니다.
1193
+ - Server Component에서 `onClick` 같은 function prop을 interactive component에 직접 전달하는 사용 방식은 React Server Components 제약상 Client Component로 분리해야 합니다.
1194
+
1195
+ ## 1.0.0
1196
+
1197
+ ### Changes
1198
+
1199
+ <!-- generated:start -->
1200
+
1201
+ _Commit range: `@orioncactuscorp/ui@0.11.0..HEAD`_
1202
+
1203
+ #### Maintenance
1204
+
1205
+ - `afc7780` chore(release): prepare npm public publish bootstrap
1206
+
1207
+ #### Other
1208
+
1209
+ - `4ea5168` Public package 배포 준비 (#73)
1210
+ <!-- generated:end -->
1211
+
1212
+ ### Major Changes
1213
+
1214
+ - 4ea5168: Public package 배포를 위한 metadata, license, documentation을 정리합니다.
1215
+ - `@orioncactuscorp/ui`와 `@orioncactuscorp/icons` package metadata를 MIT license, public publish access, homepage, author, support email 기준으로 정리합니다.
1216
+ - `@orioncactuscorp/ui` public package tarball에서 내부 `agent/*` artifact를 제외합니다.
1217
+ - README와 `docs/agent-setup.md`에 public-safe Agent 초기 세팅 prompt를 추가합니다.
1218
+ - GitHub Packages private 설치 안내를 public package 설치 안내로 교체합니다.
1219
+
1220
+ Migration Notes
1221
+ - `node_modules/@orioncactuscorp/ui/agent/*`를 직접 읽던 consumer Agent setup은 README 또는 `docs/agent-setup.md`의 복붙 prompt 기반으로 전환해야 합니다.
1222
+ - runtime component, CSS, SCSS, icon import 사용성은 변경되지 않습니다.
1223
+
1224
+ ### Patch Changes
1225
+
1226
+ - Updated dependencies [4ea5168]
1227
+ - @orioncactuscorp/icons@1.0.0
1228
+
1229
+ ### Migration Notes
1230
+
1231
+ - 없음
1232
+
1233
+ ## 0.11.0
1234
+
1235
+ ### Changes
1236
+
1237
+ <!-- generated:start -->
1238
+
1239
+ _Commit range: `@orioncactuscorp/ui@0.10.0..HEAD`_
1240
+
1241
+ #### Other
1242
+
1243
+ - `a489fc4` 아이콘 패키지 분리 (#69)
1244
+ - `a3224b8` Montage 아이콘 패키지 추가 (#70)
1245
+ - `0b897e8` BackgroundIconButton 블렌드 QA 정리 (#72)
1246
+ <!-- generated:end -->
1247
+
1248
+ ### Minor Changes
1249
+
1250
+ - a489fc4: `@orioncactuscorp/icons` package를 추가하고 `orioncactus` first-party icon set을 `@orioncactuscorp/ui`에서 분리합니다.
1251
+ - `SvgIcon`, `IconProps`, `orioncactus` icon set을 `@orioncactuscorp/icons`로 이동합니다.
1252
+ - `SvgIcon`은 비상호작용 시각 SVG primitive로 정리하고 `title`, `desc`, `aria-*` 접근성 metadata를 지원합니다.
1253
+ - `@orioncactuscorp/ui`는 내부 component indicator icon을 `@orioncactuscorp/icons` dependency에서 가져옵니다.
1254
+ - `@orioncactuscorp/ui/icons/orioncactus`, `@orioncactuscorp/ui/icons/material-rounded`, `@orioncactuscorp/ui/icons/montage` export를 제거합니다.
1255
+ - `@orioncactuscorp/ui` root barrel의 `IconDefault` export를 제거합니다.
1256
+ - `material-rounded` placeholder와 `montage` derived icon set은 새 icons package에 포함하지 않습니다.
1257
+
1258
+ Migration Notes
1259
+ - 앱 코드에서 icon을 직접 사용하는 경우 import 경로를 `@orioncactuscorp/icons`로 변경해야 합니다.
1260
+ - 기존 `import { IconDefault } from '@orioncactuscorp/ui'`는 `import { IconDefault } from '@orioncactuscorp/icons'`로 변경합니다.
1261
+ - 기존 `import { IconClose } from '@orioncactuscorp/ui/icons/orioncactus'`는 `import { IconClose } from '@orioncactuscorp/icons'`로 변경합니다.
1262
+ - `@orioncactuscorp/ui` component만 사용하는 경우 `Checkbox`, `Radio`, `Select`, `Accordion`, `ModalClose` 등의 내부 icon 표시는 그대로 동작합니다.
1263
+ - GitHub Actions에서 private package를 설치하는 consumer repository는 GitHub Packages의 `ui`, `icons` package settings에 모두 `Manage Actions access: Read` 권한이 필요합니다.
1264
+ - icon 자체에 `onClick`, `tabIndex`, `role='button'`을 부여한 consumer 코드는 부모 `button`, `a`, `IconButton`으로 interaction을 옮겨야 합니다.
1265
+
1266
+ ### Patch Changes
1267
+
1268
+ - 0b897e8: BackgroundIconButton normal variant의 blend layer를 Figma IconButtonBackground 구조에 맞춰 조정합니다.
1269
+ - 기본 아이콘은 static black 43% opacity로 낮추고, WebKit에서는 cool neutral 50 61% opacity와 `plus-darker` blend를 적용합니다.
1270
+ - 배경 slot에 white `plus-lighter` 35% layer와 black 8% `multiply` 보정 layer를 분리 적용합니다.
1271
+ - BackgroundIconButton에서 blend opacity 기본값을 관리하고, Background surface 안에서는 WebKit 전용 black 보정 layer에 4%를 추가합니다.
1272
+ - alternative variant는 cool neutral 30 61% 배경과 static white 88% 아이콘 계약으로 고정합니다.
1273
+ - WebKit normal variant는 `brightness(200%)` backdrop-filter와 black `multiply` 20% layer를 사용하고, Background surface 내부에서는 4%를 추가 보정합니다.
1274
+ - WebKit과 Chromium에서 흰색, 회색, 검정, 이미지, Modal header 환경을 검증하는 Storybook QA story와 Playwright 테스트를 추가합니다.
1275
+
1276
+ Migration Notes
1277
+ - 없음
1278
+
1279
+ - Updated dependencies [a489fc4]
1280
+ - @orioncactuscorp/icons@0.11.0
1281
+
1282
+ ### Migration Notes
1283
+
1284
+ - 앱 코드에서 icon을 직접 사용하는 경우 import 경로를 `@orioncactuscorp/icons`로 변경해야 함
1285
+ - 기존 `import { IconDefault } from '@orioncactuscorp/ui'`는 `import { IconDefault } from '@orioncactuscorp/icons'`로 변경
1286
+ - 기존 `import { IconClose } from '@orioncactuscorp/ui/icons/orioncactus'`는 `import { IconClose } from '@orioncactuscorp/icons'`로 변경
1287
+ - icon 자체에 `onClick`, `tabIndex`, `role='button'`을 부여한 consumer 코드는 부모 `button`, `a`, `IconButton`으로 interaction 이동
1288
+ - GitHub Actions에서 private package를 설치하는 consumer repository는 GitHub Packages의 `ui`, `icons` package settings에 모두 `Manage Actions access: Read` 권한 필요
1289
+
1290
+ ## 0.10.0
1291
+
1292
+ ### Changes
1293
+
1294
+ <!-- generated:start -->
1295
+
1296
+ _Commit range: `@orioncactuscorp/ui@0.9.0..HEAD`_
1297
+
1298
+ #### Other
1299
+
1300
+ - `e6e8fad` 컴포넌트 선택자 우선순위 개선 (#43)
1301
+ - `0a3f53f` GitHub Actions Node 24 런타임 전환 (#44)
1302
+ - `cb47d90` Reduced Motion 대응 기준 및 모달 동작 개선 (#46)
1303
+ - `5a24604` motion helper 도입 (#49)
1304
+ - `62c16c9` CI 실행 시간 단축 (#50)
1305
+ - `2de4e1d` oc-motion 전환 완료 (#51)
1306
+ - `4b3017a` Modal stacking contract 정리 (#52)
1307
+ - `7fcc0ae` Modal 중첩 닫기 정책 추가 (#54)
1308
+ - `e15258f` TextButton inherit variant 정리 (#55)
1309
+ - `535a5ba` motion duration scale 토큰명 정리 (#56)
1310
+ - `b9c9ad7` Field 가로 배치 지원 (#58)
1311
+ - `cf56dc8` Alert 컴포넌트 추가 (#57)
1312
+ - `e33af8b` TextButton 색상 계약 정리 (#59)
1313
+ - `99c3aed` import 경로 기준 정리 (#60)
1314
+ - `a5a67c6` 주석 정책 정리 (#61)
1315
+ - `7ad3583` Cell 인터랙션 구조 개선 (#63)
1316
+ - `2c31da4` oc-motion 피드백 및 amplitude token 개선 (#65)
1317
+ - `adea6a1` 런타임 모션 Accordion 추가 (#64)
1318
+ - `619f771` 모션 및 Storybook 상태 개선 (#66)
1319
+ - `40641ca` Bottom Modal 드래그 관성 개선 (#67)
1320
+ - `1a7a01a` 팝업 스냅 드래그 관성 개선 (#68)
1321
+ <!-- generated:end -->
1322
+
1323
+ ### Minor Changes
1324
+
1325
+ - b9c9ad7: Field에 horizontal orientation과 label width contract를 추가합니다.
1326
+
1327
+ Migration Notes
1328
+ - `Field`가 `orientation="horizontal"`과 `labelWidth` prop을 지원합니다.
1329
+ - `labelWidth`의 number 값은 `16px = 1rem` 기준 rem CSS length로 변환됩니다.
1330
+ - `FieldControl`은 stable wrapper slot인 `data-oc-component="field-control"` 및 `data-oc-part="control"`을 렌더링합니다.
1331
+ - horizontal Field의 helper/error message는 control column 시작 위치에 정렬됩니다.
1332
+
1333
+ - 2c31da4: Motion scale amplitude token을 추가합니다.
1334
+
1335
+ Migration Notes
1336
+ - `oc-motion-scale($scale, $intent)` helper 추가
1337
+ - `--oc-motion-scale-feedback`, `--oc-motion-scale-reveal` foundation token 추가
1338
+ - Button, TextButton, IconButton, BackgroundIconButton, Cell, Checkbox, Menu, Tooltip, Modal, Motion story의 scale feedback/reveal 값을 `oc-motion-scale(...)` 경유로 변경
1339
+ - Radio dot의 고정 시각 크기 scale은 motion amplitude가 아니므로 `--oc-radio-icon-scale` component contract로 분리
1340
+ - 기본 token 값은 `1`이므로 기존 scale 값은 유지되며, consumer가 token을 `0` 또는 `0.5` 등으로 override해 scale 효과를 제거하거나 약하게 조정 가능
1341
+
1342
+ - 2c31da4: `oc-motion`에 거부된 시도를 표현하는 `reject` intent를 추가합니다.
1343
+
1344
+ Migration Notes
1345
+ - `oc-motion(..., reject)`는 닫기, 전환, 입력 같은 사용자 시도가 거부되었음을 알리는 transform feedback에 사용
1346
+ - `reject` intent는 일반 환경에서 smooth spring-backed transform transition을 제공
1347
+ - `--oc-motion-duration-reject`, `--oc-motion-timing-reject` foundation token 추가 및 smooth spring 기반 기본값 제공
1348
+
1349
+ - cf56dc8: Alert compound component를 추가합니다.
1350
+
1351
+ Migration Notes
1352
+ - `Alert`, `AlertRoot`, `AlertContent`, `AlertHeading`, `AlertDescription`, `AlertActionArea`, `AlertAction` root export 추가
1353
+ - `AlertContent`는 `Modal`의 popup/hug overlay contract를 재사용하며 기본 `role="alertdialog"`와 heading/description 접근성 연결 제공
1354
+ - Alert body layout은 `data-oc-part="container"` 아래 `message`와 `actions` slot을 sibling으로 배치함
1355
+ - `AlertRoot`는 기본적으로 backdrop/outside dismissal을 막고, 정보성 alert에서만 `outsideDismissible`로 허용 가능
1356
+ - `AlertHeading`과 `AlertDescription`은 `data-oc-part="message"` slot으로 그룹화됨
1357
+ - `AlertActionArea`는 기본적으로 action에 autofocus를 주입하지 않으며, destructive confirm 등에서 `initialFocus="least-destructive"`를 명시해 사용할 수 있음
1358
+ - `AlertAction`은 `normal`, `assistive`, `negative` variant를 제공하며 기본 클릭 시 Alert를 닫음
1359
+ - Alert width는 `--oc-alert-width` contract var로 조정 가능하며 Modal surface에는 `--oc-modal-width`로 전달됨
1360
+ - `ModalContent`는 Base UI Dialog initial focus를 제어하는 `initialFocus` prop과 popup 자체를 가리키는 `"content"` 값을 지원함
1361
+
1362
+ - e15258f: TextButton 기본 스타일을 Figma의 assistive medium 계약에 맞추고, 부모 색상과 타이포를 따르는 `inherit` variant/size 조합을 명시합니다.
1363
+
1364
+ Migration Notes
1365
+ - `TextButton` 기본값이 `variant="assistive"`, `size="medium"`으로 변경됨
1366
+ - 기존 `variant="normal"`은 제거되며, 부모 색상을 상속해야 하는 경우 `variant="inherit"` 사용
1367
+ - 부모 타이포를 상속해야 하는 경우 기존처럼 `size="inherit"` 사용
1368
+
1369
+ - 7fcc0ae: Modal에 nested navigation dismissal 정책을 추가합니다.
1370
+ - `ModalRoot`에 `navigationDepth`와 `dismissBehavior` prop 추가
1371
+ - `navigationDepth > 0`의 `auto` 정책에서 drag dismissal과 background pointer dismissal 기본 차단
1372
+ - `dismissBehavior`의 reason별 `allow`/`block` override 지원
1373
+
1374
+ Migration Notes
1375
+ - 기존 Modal은 `navigationDepth` 기본값이 `0`이므로 동작 변경 없음
1376
+ - 중첩 화면 Modal에서 back stack 우회 방지가 필요하면 `navigationDepth`를 현재 depth로 전달
1377
+ - 중첩 화면에서도 drag 또는 backdrop 닫기를 허용해야 하면 `dismissBehavior={{ drag: 'allow', backdrop: 'allow' }}` 사용
1378
+
1379
+ - 7ad3583: Cell에 interactive row, fill width, leading/content/trailing slot, divider variant contract를 추가하고 MenuItem이 개선된 Cell primitive를 재사용하도록 정리합니다.
1380
+
1381
+ Migration Notes
1382
+ - Cell은 `divider="normal|neutral|alternative|none"`을 지원하며 기존 `dividerColor` prop은 제거
1383
+ - CellItem은 `interactive`, `fillWidth`, `verticalAlign`, `leading`, `trailing`, `content`, `description`, `divider` prop과 `data-oc-*` selector contract를 제공
1384
+ - CellItem의 `leading`, `trailing`에 직접 전달한 Icon은 `size`가 없으면 Cell slot icon size를 따름
1385
+ - `interactive` CellItem은 `data-oc-cell-control`로 opt-in한 내부 control에만 cell click activation을 전달
1386
+ - MenuItem은 CellItem 기반으로 렌더링되며 기존 `data-oc-component="menu-item"` contract는 유지
1387
+ - MenuItem에 `leading`, `trailing`, `content`, `fillWidth`, `divider` prop 추가
1388
+ - Menu는 기존 `size="small|medium"`에 따른 typography와 em 기반 item padding을 유지
1389
+
1390
+ - 1a7a01a: Modal Popup에 `snapPositions`와 `defaultSnapPosition`을 추가해 가운데, 좌우, 상하, 모서리 위치로 드래그 후 스냅할 수 있도록 개선합니다.
1391
+
1392
+ Migration Notes
1393
+ - 기존 BottomSheet `snapPoints` 사용 방식 변경 없음
1394
+ - Popup snap이 필요한 경우 `variant="popup"`과 `snapPositions`를 함께 지정
1395
+
1396
+ - adea6a1: TS runtime `oc-motion` layer와 Accordion compound component를 추가합니다.
1397
+
1398
+ Migration Notes
1399
+ - `@orioncactuscorp/ui/utils/motion` subpath 추가
1400
+ - `@orioncactuscorp/ui/react/motion` subpath 추가
1401
+ - `ocMotion.resolve(...)`는 SCSS `oc-motion`과 같은 intent, phase, pace, reduced-motion policy, duration scale token vocabulary 사용
1402
+ - `MotionReveal` runtime wrapper 추가
1403
+ - `MotionReveal`은 `block-size` reveal을 low-level `ocSpring` animator에 연결하고 reduced-motion에서 non-feedback reveal motion 즉시 완료
1404
+ - `Accordion`, `AccordionItem`, `AccordionSummary`, `AccordionDetails`, `AccordionDescription`, `AccordionContent` compound export 추가
1405
+ - Accordion details reveal은 CSS grid 대신 `MotionReveal` 사용
1406
+ - Accordion selector contract 추가
1407
+ - `IconChevronDownTight` export 추가
1408
+
1409
+ - 5a24604: motion duration scale token과 `oc-motion(...)` SCSS helper를 추가해 transition duration, pace, reduced-motion 정책을 공통 contract로 관리합니다.
1410
+
1411
+ Migration Notes
1412
+ - `--oc-motion-*` foundation token 추가
1413
+ - `@include oc-motion($properties, $intent, $phase, $pace, $duration-scale, $reduced)` mixin 추가
1414
+ - `transition: oc-motion(...)`, `oc-motion-duration(...)`, `oc-motion-timing(...)` SCSS function 추가
1415
+ - `$duration-token` escape hatch 추가. 단 spring-backed motion에서는 compile error 처리
1416
+ - `$pace`는 `quick | normal | slow` semantic preset만 허용
1417
+ - 숫자 duration 보정은 `$duration-scale` escape hatch로 분리
1418
+ - `reveal` motion은 일반 환경에서 spring profile을 사용하며 transform에는 extra-bounce를 적용
1419
+ - `--oc-motion-pace-*`, `--oc-motion-duration-scale`, `--oc-motion-duration-scale-reduced`, `--oc-motion-duration-scale-preserve`는 unitless multiplier로 사용
1420
+ - spring-backed `oc-motion` duration도 `--oc-motion-duration-scale`과 `--oc-motion-pace-*` multiplier를 적용
1421
+ - unknown phase, pace, reduced policy와 음수 `$duration-scale`은 compile error 처리
1422
+ - `$reduced: preserve`는 `--oc-motion-duration-scale-preserve`를 사용
1423
+ - `Interaction`, `Button`, `IconButton`, `TextButton`, `BackgroundIconButton`, `CheckMark`, `Checkbox`, `Radio`, `Switch`, `ScrollArea`, `Field`, `Tooltip`, `Menu`, `Modal` transition을 motion helper 기반으로 전환
1424
+ - `Menu`, `Tooltip`, `Modal` reveal 계열은 reduced-motion에서 helper duration token을 사용하고 scale/translate motion을 제거
1425
+ - `Switch` thumb처럼 상태 이해에 필요한 motion은 `$reduced: preserve`로 명시
1426
+ - `Loading`은 reduced-motion에서 반복 animation을 멈추고 static indicator로 대체
1427
+ - `docs/oc-motion.md`와 README motion 섹션 추가
1428
+
1429
+ - 2c31da4: Motion scale/distance amplitude parent token과 `oc-motion-distance(...)` helper를 추가합니다.
1430
+
1431
+ Migration Notes
1432
+ - `--oc-motion-scale` parent token 추가
1433
+ - `--oc-motion-scale-feedback`, `--oc-motion-scale-reveal`이 기본적으로 `--oc-motion-scale`을 참조하도록 변경
1434
+ - `--oc-motion-distance-scale`, `--oc-motion-distance-scale-reject`, `--oc-motion-distance-scale-reveal` token 추가
1435
+ - `oc-motion-distance($distance, $intent)` SCSS helper 추가
1436
+ - Menu reveal translate와 Modal reject shake 거리가 motion distance token을 사용
1437
+ - Storybook toolbar에서 전체 scale/distance와 intent별 override 조정 가능
1438
+
1439
+ ### Patch Changes
1440
+
1441
+ - adea6a1: Accordion chevron rotation이 bouncy spring-backed `oc-motion`을 사용하도록 조정합니다.
1442
+
1443
+ Migration Notes
1444
+ - Cell/Accordion icon slot size contract `--oc-cell-icon-size`가 shared Cell contract default에서 `1.375rem`으로 정렬됨
1445
+ - `oc-motion(transform, feedback, $phase: settle)`가 bouncy spring-backed timing을 사용함
1446
+ - Accordion 기본 chevron rotation은 `feedback + settle` phase에 1.5 duration scale을 적용하고 토글마다 시계방향 180deg씩 누적 회전함
1447
+ - Accordion icon slot은 Cell과 같은 `--oc-cell-icon-size` block-size contract를 유지하며 inline axis는 강제하지 않음
1448
+
1449
+ - adea6a1: Cell과 Accordion disabled 시각 상태를 opacity contract로 정리합니다.
1450
+
1451
+ Migration Notes
1452
+ - Cell disabled 상태는 `--oc-cell-disabled-opacity` contract var를 통해 내부 visual slot에만 기본 `0.28` opacity로 표현됨
1453
+ - Accordion disabled item도 Cell과 같은 `--oc-cell-disabled-opacity` contract를 내부 summary/details visual slot에 적용함
1454
+ - 기존 disabled label color token 기반 표현 대신 content opacity가 적용되며 divider border는 흐려지지 않음
1455
+
1456
+ - 4b3017a: Modal이 여러 개 동시에 열릴 때 `--oc-zindex-4` modal band 안에서 열린 순서대로 자동 stacking되도록 개선합니다.
1457
+
1458
+ Migration Notes
1459
+ - Modal backdrop과 viewport가 각각 `--oc-modal-backdrop-z-index`, `--oc-modal-viewport-z-index` contract var를 통해 z-index를 계산
1460
+ - 중첩 Modal은 내부 stack offset으로 순서를 조정하며, 닫힌 뒤 다시 열린 Modal은 가장 위에 배치
1461
+ - Tooltip, Toast 등 더 높은 floating layer를 위해 Modal viewport의 고정 `--oc-zindex-5` 사용 제거
1462
+ - Modal public prop 추가 없음
1463
+
1464
+ - e33af8b: TextButton 텍스트 색상을 `--oc-text-button-color` component contract var로 노출하고, Interaction 색상은 텍스트 현재 색상을 따르도록 정리합니다.
1465
+
1466
+ Migration Notes
1467
+ - TextButton의 `primary`, `assistive`, `inherit` 색상은 `--oc-text-button-color`로 제어됨
1468
+ - TextButton root class에서 색상을 바꾸는 consumer CSS는 `color` 대신 `--oc-text-button-color` override를 우선 권장
1469
+ - 예: `Header`의 logo link, inquiry list의 `loadMoreButton`처럼 `TextButton`에 직접 className을 붙이는 경우
1470
+ - 부모나 slot에서 `color`를 상속받는 기존 `variant="inherit"` 사용은 계속 동작함
1471
+
1472
+ - e6e8fad: 컴포넌트 modifier selector specificity를 낮춰 소비자 커스텀 class의 component contract var override가 더 쉽게 적용되도록 개선합니다.
1473
+
1474
+ Migration Notes
1475
+ - Button, IconButton, TextButton, BackgroundIconButton, Interaction, Badge의 root modifier selector를 `:where()` 기반으로 조정
1476
+ - BackgroundIconButton background slot 스타일 기준을 CSS Module hash class에서 `data-oc-part="background"` contract로 정리
1477
+ - Agent selector contract와 convention metadata에 low-specificity modifier authoring 정책 추가
1478
+ - CSS Module hash class 직접 타겟은 여전히 public customization contract가 아님
1479
+
1480
+ - cb47d90: Reduced motion 환경에서 motion intent 기준을 적용하도록 주요 컴포넌트의 transition 동작을 조정합니다.
1481
+
1482
+ Migration Notes
1483
+ - Menu와 Tooltip은 `prefers-reduced-motion: reduce`에서 scale, translate, spring motion 대신 인지 가능한 opacity-only transition 사용
1484
+ - Button, Interaction, CheckMark, Checkbox, Radio, ScrollArea, Switch는 reduced-motion에서도 opacity/color/background feedback transition 유지
1485
+ - Bottom Modal은 reduced-motion에서도 공간 모델을 전달하기 위한 짧은 non-spring slide transition 유지
1486
+ - Modal drag dismissal은 reduced-motion에서도 CSS에 정의된 transition duration이 있으면 해당 duration을 사용
1487
+ - Popup Modal은 기본 환경에서 scale transition을 유지
1488
+ - Popup/full Modal은 reduced-motion에서 transform motion 없이 인지 가능한 opacity transition 중심으로 동작
1489
+ - Modal content는 `surface-motion` 레이어와 `surface` 레이어를 분리해 transform/opacity motion과 visual clipping/layout 책임을 분리
1490
+ - Modal visual customization은 `data-oc-part="surface"` 또는 component contract var 기준 권장
1491
+ - ModalContent `className`/`style`은 visual surface 레이어에 적용
1492
+ - Loading은 reduced-motion에서 반복 animation을 멈추고 static indicator로 대체
1493
+
1494
+ - 2c31da4: Alert background 클릭이 닫기 차단 상태일 때 popup surface에 거부 피드백을 표시합니다.
1495
+
1496
+ Migration Notes
1497
+ - `AlertRoot` 기본값처럼 background dismissal이 차단된 상태에서 backdrop을 클릭하면 popup surface가 reject motion으로 응답
1498
+ - Modal motion layer가 닫기 시도 거부 중 `data-oc-modal-feedback="reject"` transient state selector를 노출
1499
+ - 거부 피드백 거리는 `--oc-modal-reject-distance` contract var로 조정 가능
1500
+
1501
+ - 2c31da4: Scale 기반 active feedback이 `oc-motion` helper를 거치도록 누락된 컴포넌트를 정리합니다.
1502
+
1503
+ Migration Notes
1504
+ - `TextButton` active scale feedback이 `oc-motion(transform, feedback)` transition을 사용
1505
+ - `BackgroundIconButton` active scale feedback이 `oc-motion(transform, feedback)` transition을 사용
1506
+ - public prop 또는 selector 변경 없음
1507
+
1508
+ - 619f771: Bottom Modal의 open motion을 runtime spring 기반으로 전환하고 drag release, peek/snap settle, backdrop opacity를 sheet translate와 같은 프레임에서 보간합니다.
1509
+
1510
+ Migration Notes
1511
+ - `reveal` spring은 opacity에 smooth profile, transform에 snappy profile과 extra bounce를 적용
1512
+ - `move`, `ambient loop` motion의 SCSS/TS spring profile 동기화
1513
+ - `gesture settle` duration token을 `0.52s`로 조정하고 Safari drag release 체감을 위해 token easing 유지
1514
+ - Bottom Modal은 reduced-motion에서도 sheet translate와 drag settle motion을 유지
1515
+ - Bottom Modal backdrop opacity가 open/peek/snap/drag settle 중 sheet motion과 함께 보간
1516
+
1517
+ ### Migration Notes
1518
+
1519
+ - `TextButton` 기본값이 `variant="assistive"`, `size="medium"`으로 변경되며, 기존 `variant="normal"`은 제거됨
1520
+ - `Cell`의 기존 `dividerColor` prop은 제거되고 `divider="normal|neutral|alternative|none"` contract로 대체됨
1521
+ - `Field`는 `orientation="horizontal"`과 `labelWidth`를 지원하며, horizontal helper/error message 정렬이 control column 기준으로 변경됨
1522
+ - `ModalRoot`는 nested navigation dismissal 제어를 위해 `navigationDepth`와 `dismissBehavior`를 지원함
1523
+ - `Alert`, `Accordion`, `MotionReveal`, motion utility subpath 및 motion foundation token이 추가됨
1524
+ - scale, distance, reject, reduced-motion 관련 motion token과 helper가 추가되어 consumer override 지점이 확장됨
1525
+
1526
+ ## 0.9.0
1527
+
1528
+ ### Changes
1529
+
1530
+ <!-- generated:start -->
1531
+
1532
+ _Commit range: `@orioncactuscorp/ui@0.8.0..HEAD`_
1533
+
1534
+ #### Other
1535
+
1536
+ - `6c77a77` 자동완성 필드 표면 보정 (#33)
1537
+ - `fc17cf4` iOS Spring 모션 유틸리티 추가 (#34)
1538
+ - `514564f` Atomic foundation 토큰 정리 (#36)
1539
+ - `4467c24` Spring Storybook 개선 (#37)
1540
+ - `dfa8e89` Spring transition API 개선 (#38)
1541
+ - `2047b3e` Spring 런타임 개선 (#39)
1542
+ <!-- generated:end -->
1543
+
1544
+ ### Minor Changes
1545
+
1546
+ - fc17cf4: iOS spring motion을 CSS와 TS에서 사용할 수 있는 utility를 추가합니다.
1547
+ - `@orioncactuscorp/ui/scss/spring`의 `oc-spring(...)`, `oc-spring-timing(...)`, `oc-spring-settle-duration(...)`, `oc-spring-duration-scale(...)` 추가
1548
+ - `@orioncactuscorp/ui/utils/spring`의 `ocSpring` runtime utility 추가
1549
+ - `--oc-spring-smooth-*`, `--oc-spring-snappy-*`, `--oc-spring-bouncy-*` preset token 추가
1550
+
1551
+ Migration Notes
1552
+ - 신규 spring API의 `duration`은 iOS와 같은 perceptual duration 기준입니다.
1553
+ - CSS에 출력되는 transition duration은 spring 감쇠가 안정되는 settling duration입니다.
1554
+ - TS runtime 결과에서는 실제 CSS duration을 `settlingDuration`, `settlingDurationSeconds`로 명확히 구분합니다.
1555
+ - CSS token을 직접 사용할 때는 `--oc-spring-*` token을 사용하고, SCSS에서는 `oc-spring(...)` 사용을 권장합니다.
1556
+
1557
+ - 2047b3e: React에서 spring runtime을 사용할 수 있는 hook subpath를 추가합니다.
1558
+ - `@orioncactuscorp/ui/react/spring` export 추가
1559
+ - `useSpringAnimator`로 React lifecycle에 맞춘 animator 생성/정리 지원
1560
+ - `useSpringValue`로 value, velocity, target frame state와 retarget setter 제공
1561
+ - `useSpringTarget`으로 React state target을 따라가는 controlled spring value 지원
1562
+ - Storybook runtime drag 예제에 hook 기반 사용 예시 추가
1563
+
1564
+ Migration Notes
1565
+ - 기존 `@orioncactuscorp/ui/utils/spring` API는 그대로 유지됩니다.
1566
+ - React component에서 spring value가 React state target을 따라가야 하면 `useSpringTarget` 사용을 권장합니다.
1567
+ - 직접 retarget setter, spring 변경, jump 제어가 필요하면 `useSpringValue` 사용을 권장합니다.
1568
+ - DOM write를 직접 제어하는 고빈도 gesture에는 `useSpringAnimator` 또는 기존 `createSpringAnimator` 사용을 권장합니다.
1569
+
1570
+ - 2047b3e: TS spring runtime animator를 추가하고 static spring sampling과 같은 Apple Spring 모델을 공유하도록 정리합니다.
1571
+ - `createSpringAnimator`와 `ocSpring.createAnimator` 추가
1572
+ - runtime animator에서 number, number array, numeric object 값 지원
1573
+ - `setTarget()` retarget 시 현재 position과 velocity를 이어받는 persistent spring 동작 추가
1574
+ - `setSpring()` 및 `blendDuration` 기반 spring parameter blending 지원
1575
+ - `ocSpring.*` 결과에 `response`와 `evaluate({ time })` 추가
1576
+ - Storybook에 WWDC 2023 2D drag spring 예제 추가
1577
+
1578
+ Migration Notes
1579
+ - 기존 `ocSpring.*.transition()`, `settlingDuration`, `timingFunction` 사용법은 그대로 유지됩니다.
1580
+ - gesture, drag, interrupt가 중요한 런타임 상호작용은 `createSpringAnimator` 사용을 권장합니다.
1581
+ - object value를 animator에 전달할 때는 초기 value, target, velocity의 numeric key shape가 같아야 합니다.
1582
+
1583
+ - dfa8e89: SCSS `oc-spring(...)`에서 여러 transition property와 property별 spring 설정을 지원합니다.
1584
+ - `oc-spring((opacity, transform), 0.3s, snappy)`처럼 동일 spring 설정을 여러 property에 적용할 수 있습니다.
1585
+ - `oc-spring((opacity: (0.3s, snappy), transform: (0.3s, snappy, 0.1)))`처럼 property별 duration, preset, extra bounce를 지정할 수 있습니다.
1586
+ - `oc-spring((opacity: (duration: 0.3s, preset: snappy, delay: 50ms)))`처럼 property별 고급 옵션은 named map으로 지정할 수 있습니다.
1587
+ - Menu transition은 opacity와 transform spring 설정을 분리해 open/close transition 대상이 유지되도록 개선합니다.
1588
+
1589
+ Migration Notes
1590
+ - 기존 `oc-spring(transform, 0.3s, snappy)` 단일 property 사용법은 그대로 유지됩니다.
1591
+ - property별 설정 tuple은 `(duration, preset, extra-bounce, delay, samples)` 순서입니다.
1592
+ - property별 physical spring이나 `bounce`, `initial-velocity` 같은 고급 옵션은 named map을 사용해야 합니다.
1593
+
1594
+ - 514564f: foundation `element` token을 `atomic`과 `motion`으로 재구성합니다.
1595
+ - `@orioncactuscorp/ui/scss/foundations/element`를 제거하고 `atomic`, `motion` foundation으로 분리
1596
+ - `--oc-element-radius-*`, `--oc-element-width-*`, `--oc-element-blur-*` token을 `--oc-atomic-*` token으로 변경
1597
+ - `--oc-spring-*` preset token을 `motion` foundation에서 발행
1598
+ - `--oc-element-header-height`, `--oc-element-overlay-*`, `--oc-element-ease-spring-*` token 제거
1599
+ - `Badge` accent override contract를 `--oc-element-accent-color`에서 `--oc-badge-accent-color`로 변경
1600
+
1601
+ Migration Notes
1602
+ - `@orioncactuscorp/ui/scss/foundations/element` import를 `@orioncactuscorp/ui/scss/foundations/atomic`으로 변경하세요.
1603
+ - spring preset CSS token이 필요하면 `@orioncactuscorp/ui/scss/foundations/motion`도 함께 import하세요.
1604
+ - `--oc-element-radius-*`는 `--oc-atomic-radius-*`로 변경하세요.
1605
+ - `--oc-element-width-*`는 `--oc-atomic-width-*`로 변경하세요.
1606
+ - `--oc-element-blur-*`는 `--oc-atomic-blur-*`로 변경하세요.
1607
+ - `--oc-element-header-height`는 제거되었습니다. 앱 또는 Header 레벨에서 정의하세요.
1608
+ - `--oc-element-overlay-*`는 제거되었습니다. `Interaction` 컴포넌트의 `--oc-interaction-opacity-hover`, `--oc-interaction-opacity-focus`, `--oc-interaction-opacity-active` contract를 사용하세요.
1609
+ - `--oc-element-ease-spring-*`는 제거되었습니다. `--oc-spring-*` 또는 SCSS `oc-spring(...)` API를 사용하세요.
1610
+ - `--oc-element-accent-color`는 제거되었습니다. `Badge` accent color override에는 `--oc-badge-accent-color`를 사용하세요.
1611
+
1612
+ ### Patch Changes
1613
+
1614
+ - 6c77a77: iOS 자동완성 상태에서 Field 기반 TextInput, TextArea, Select의 radius와 stroke surface가 유지되도록 개선합니다.
1615
+
1616
+ ### Migration Notes
1617
+
1618
+ - 없음
1619
+
1620
+ ## 0.8.0
1621
+
1622
+ ### Changes
1623
+
1624
+ <!-- generated:start -->
1625
+
1626
+ _Commit range: `@orioncactuscorp/ui@0.7.1..HEAD`_
1627
+
1628
+ #### Other
1629
+
1630
+ - `d6adfe1` Divider 여백 제어 개선 (#30)
1631
+ - `cdca65e` Field 컨트롤 터치 영역 개선 (#31)
1632
+ - `8410cfe` 사이트 아키텍처 Agent 문서 추가 (#32)
1633
+ <!-- generated:end -->
1634
+
1635
+ ### Minor Changes
1636
+
1637
+ - d6adfe1: Divider에 `spacing` prop을 추가합니다.
1638
+
1639
+ Migration Notes
1640
+ - `spacing='normal'`은 기존 기본 여백을 유지합니다.
1641
+ - `spacing='none'`으로 Divider 외부 여백을 제거할 수 있습니다.
1642
+ - `spacing`에 CSS variable 문자열 또는 number 값을 전달해 orientation에 맞는 여백을 조정할 수 있습니다.
1643
+ - 기존 `--oc-divider-margin-block`, `--oc-divider-margin-inline` contract는 `--oc-divider-spacing`으로 대체됩니다.
1644
+
1645
+ ### Patch Changes
1646
+
1647
+ - cdca65e: TextInput, TextArea, Select의 네이티브 컨트롤 터치 영역과 slot 레이아웃 동작을 개선합니다.
1648
+
1649
+ ### Migration Notes
1650
+
1651
+ - Divider의 기존 `--oc-divider-margin-block`, `--oc-divider-margin-inline` contract는 `--oc-divider-spacing`으로 대체됩니다.
1652
+ - 기존 기본 여백은 `spacing='normal'`에서 유지됩니다.
1653
+ - Divider 외부 여백 제거는 `spacing='none'`, 사용자 지정 여백은 CSS variable 문자열 또는 number 값으로 지정할 수 있습니다.
1654
+
1655
+ ## 0.7.1
1656
+
1657
+ ### Changes
1658
+
1659
+ <!-- generated:start -->
1660
+
1661
+ _Commit range: `@orioncactuscorp/ui@0.7.0..HEAD`_
1662
+
1663
+ #### Fixes
1664
+
1665
+ - `ba2a2c0` fix(agent): align migration manifest version
1666
+
1667
+ #### Documentation
1668
+
1669
+ - `a8a8282` docs: require agent manifest version checks
1670
+ <!-- generated:end -->
1671
+
1672
+ ### Patch Changes
1673
+
1674
+ - 0.7.0 package artifact의 agent migration manifest version mismatch를 보정합니다.
1675
+
1676
+ Migration Notes
1677
+ - `packages/ui/agent/migration-manifest.json.packageVersion`을 package version과 동일하게 유지
1678
+ - consumer Agent는 `0.7.1`부터 package artifact 내부 manifest version을 신뢰 가능
1679
+
1680
+ ### Migration Notes
1681
+
1682
+ - 없음
1683
+
1684
+ ## 0.7.0
1685
+
1686
+ ### Changes
1687
+
1688
+ <!-- generated:start -->
1689
+
1690
+ _Commit range: `@orioncactuscorp/ui@0.6.8..HEAD`_
1691
+
1692
+ #### Refactors
1693
+
1694
+ - `b2188a4` refactor(field): consolidate field control styles
1695
+
1696
+ #### Documentation
1697
+
1698
+ - `b95b5a1` docs: update component documentation
1699
+ - `9b18a90` docs: add public surface checklist
1700
+
1701
+ #### Other
1702
+
1703
+ - `dc64ffb` ActionArea 추가 및 모달 액션 영역 개선 (#25)
1704
+ - `ac3e340` 필드 컨트롤 콘텐츠 슬롯 추가 (#26)
1705
+ - `234f2a1` 컴포넌트 마이너 개선 (#27)
1706
+ - `f84fb2a` Montage 아이콘 세트 추가 (#28)
1707
+ - `afdd3d3` 필드 컨트롤 surface 클릭 동작 개선 (#29)
1708
+ <!-- generated:end -->
1709
+
1710
+ ### Minor Changes
1711
+
1712
+ - dc64ffb: ActionArea와 ActionAreaButton을 추가하고 ModalFooter의 ActionArea spacing contract를 정리합니다.
1713
+
1714
+ Migration Notes
1715
+ - Modal 하단 버튼 조합은 ModalFooter 내부에서 ActionArea를 사용하는 방식 권장
1716
+ - Modal slot별 x spacing CSS 변수 추가: `--oc-modal-header-space-x`, `--oc-modal-container-space-x`, `--oc-modal-footer-space-x`
1717
+ - ModalFooter 내부 ActionArea에 `--oc-action-area-padding-x`, `--oc-action-area-padding-y`, `--oc-action-area-padding-bottom` 주입
1718
+
1719
+ - f84fb2a: montage 보조 아이콘 세트를 추가합니다.
1720
+
1721
+ Migration Notes
1722
+ - montage 아이콘은 `@orioncactuscorp/ui/icons/montage` subpath에서 사용
1723
+ - 기본 icon set은 `orioncactus` 유지
1724
+ - montage 아이콘은 루트 barrel export에 포함하지 않음
1725
+
1726
+ - f84fb2a: SvgIcon과 공통 IconProps를 non-interactive visual primitive 계약으로 정리합니다.
1727
+
1728
+ Migration Notes
1729
+ - `SvgIcon`과 아이콘 컴포넌트의 직접 `onClick` 사용 제거
1730
+ - 클릭 가능한 아이콘은 `IconButton`, `Button` icon prop 또는 상위 interactive 컴포넌트 사용
1731
+ - 의미 있는 아이콘은 `role="img"`와 `aria-label` 또는 `aria-labelledby` 사용
1732
+ - 기본 아이콘 크기 `24px` 유지
1733
+
1734
+ ### Patch Changes
1735
+
1736
+ - ac3e340: TextInput, TextArea, Select의 content slot primitive와 field control slot 사용 예시를 보강합니다.
1737
+
1738
+ Migration Notes
1739
+ - TextInputContent public primitive 추가
1740
+ - TextInput leading/trailing slot에서 TextInputContent 사용 권장
1741
+ - TextInput leading/trailing slot selector를 `leading-content`, `trailing-content`로 정리
1742
+ - SelectContent public primitive 및 Select leading/trailing slot 추가
1743
+ - TextAreaContent public primitive 및 TextArea leading/trailing slot 추가
1744
+ - TextInputContent, SelectContent, TextAreaContent icon variant padding 추가
1745
+ - TextInputContent, SelectContent, TextAreaContent icon variant `aria-hidden` 기본값 추가
1746
+ - TextArea `className`, `style`은 native textarea에 적용되며 wrapper 커스터마이징은 `containerClassName`, `containerStyle` 사용
1747
+ - TextArea leading/trailing content는 TextArea content surface 내부에서 column layout으로 배치
1748
+ - 기존 TextInput `leading`, `trailing`, `trailingInteractive` API 유지
1749
+
1750
+ - afdd3d3: TextInput, TextArea, Select의 content surface 클릭이 native control focus로 위임되도록 개선합니다.
1751
+
1752
+ Migration Notes
1753
+ - TextInput, TextArea, Select의 content surface 클릭 시 내부 native control focus 보장
1754
+ - interactive trailing content, native button/link/control, disabled control은 focus delegation 대상에서 제외
1755
+ - Select는 브라우저가 `showPicker`를 지원하는 경우 content surface 클릭으로 native picker 열기 시도
1756
+
1757
+ - 234f2a1: TextInput, TextArea, Select의 field control surface contract를 통합합니다.
1758
+
1759
+ Migration Notes
1760
+ - TextInput, TextArea, Select의 stroke/background/outline 내부 CSS 변수를 `--oc-field-control-*`로 통합
1761
+ - invalid 기본 stroke에 1.5px inset stroke와 WebKit DPR 보정 적용
1762
+ - invalid focus 상태는 기존 2.5px focus stroke contract 유지
1763
+
1764
+ - 234f2a1: Modal, Cell, Button의 기본 시각 contract를 보완합니다.
1765
+
1766
+ Migration Notes
1767
+ - Modal과 Cell의 상속 텍스트 색상에 `--oc-color-theme-label-normal` 적용
1768
+ - Button icon-only 상태에 정사각 control size 적용
1769
+ - Button icon-only와 fullWidth 조합은 fullWidth contract 우선 유지
1770
+
1771
+ - 234f2a1: TextInput invalid 상태의 stroke 색상 투명도를 조정합니다.
1772
+
1773
+ Migration Notes
1774
+ - TextInput invalid stroke에 `--oc-color-theme-status-negative` alpha 35 적용
1775
+ - TextInput invalid focus outline 색상은 기존 negative 원색 유지
1776
+
1777
+ ### Migration Notes
1778
+
1779
+ - 없음
1780
+
1781
+ ## 0.6.8
1782
+
1783
+ ### Changes
1784
+
1785
+ <!-- generated:start -->
1786
+
1787
+ _Commit range: `@orioncactuscorp/ui@0.6.7..HEAD`_
1788
+
1789
+ #### Other
1790
+
1791
+ - `5d403b0` 모달 바텀시트 터치 스크롤 보정 (#23)
1792
+ <!-- generated:end -->
1793
+
1794
+ ### Patch Changes
1795
+
1796
+ - 5d403b0: Modal BottomSheet의 scrollable body가 top에서 시작한 touch drag-dismiss 제스처 동안에만 rubber-band로 함께 움직이지 않도록 overscroll을 차단합니다.
1797
+
1798
+ Migration Notes
1799
+ - 없음
1800
+
1801
+ ### Migration Notes
1802
+
1803
+ - 없음
1804
+
1805
+ ## 0.6.7
1806
+
1807
+ ### Changes
1808
+
1809
+ <!-- generated:start -->
1810
+
1811
+ _Commit range: `@orioncactuscorp/ui@0.6.6..HEAD`_
1812
+
1813
+ #### Other
1814
+
1815
+ - `4ed1bc7` 모달 터치 스크롤 handoff 보정 (#22)
1816
+ <!-- generated:end -->
1817
+
1818
+ ### Patch Changes
1819
+
1820
+ - 4ed1bc7: Modal BottomSheet의 touch content drag가 scrollTop 0에서 native body overscroll을 먼저 차단하고, 내부 스크롤에서 sheet drag로 넘어갈 때 handoff 기준점을 재설정하도록 보정합니다. React passive touchmove 위임을 우회하기 위해 open bottom sheet에 non-passive native touchmove listener를 사용합니다.
1821
+
1822
+ Migration Notes
1823
+ - 기존 Modal API 변경 없음
1824
+ - touch device에서 scrollable Modal body를 아래로 끌 때 body rubber-band보다 sheet drag가 우선됨
1825
+ - scrolled body는 내부 스크롤을 우선하며 top 도달 후 sheet drag로 전환됨
1826
+
1827
+ ### Migration Notes
1828
+
1829
+ - 없음
1830
+
1831
+ ## 0.6.6
1832
+
1833
+ ### Changes
1834
+
1835
+ <!-- generated:start -->
1836
+
1837
+ _Commit range: `@orioncactuscorp/ui@0.6.5..HEAD`_
1838
+
1839
+ #### Other
1840
+
1841
+ - `6a0151c` 모달 터치 드래그 닫기 보정 (#21)
1842
+ <!-- generated:end -->
1843
+
1844
+ ### Patch Changes
1845
+
1846
+ - 6a0151c: Modal BottomSheet가 실제 touch 입력에서 pointer cancel 이후에도 header/handle 및 scrollTop 0 content drag-dismiss를 처리하도록 보정합니다.
1847
+
1848
+ Migration Notes
1849
+ - 기존 Modal API 변경 없음
1850
+ - `canCloseAttempt`/`onCloseAttempt` drag-dismiss guard 의미 유지
1851
+ - mobile/touch content drag는 body scroll이 top인 경우 sheet drag로 전환되며, scrolled body는 내부 scroll을 우선
1852
+
1853
+ ## 0.6.5
1854
+
1855
+ ### Changes
1856
+
1857
+ <!-- generated:start -->
1858
+
1859
+ _Commit range: `@orioncactuscorp/ui@0.6.4..HEAD`_
1860
+
1861
+ #### Other
1862
+
1863
+ - `9bce29e` 컴포넌트 selector contract 정리 (#19)
1864
+ - `130ba90` 모달 바텀시트 드래그 개선 (#20)
1865
+ <!-- generated:end -->
1866
+
1867
+ ### Patch Changes
1868
+
1869
+ - 9bce29e: Legacy compatibility selector 목록과 제거 정책을 Agent artifact로 문서화합니다.
1870
+
1871
+ Migration Notes
1872
+ - `agent/selector-contract.md`를 추가해 consumer customization selector, provider-owned 예외 attr, legacy compatibility attr replacement를 정리합니다.
1873
+ - legacy attr은 호환 출력으로만 유지하며 새 consumer styling target으로 사용하지 않습니다.
1874
+ - legacy attr 제거는 patch/minor에서 진행하지 않고, 명시적으로 승인된 breaking/major migration 후보로만 다룹니다.
1875
+
1876
+ - 130ba90: Modal bottom sheet drag now applies resistant downward movement when close guards prevent drag dismissal.
1877
+
1878
+ Migration Notes
1879
+ - `canCloseAttempt`가 `reason: 'drag-dismiss'`를 차단하는 BottomSheet는 drag 중 닫힘 거리까지 그대로 따라가지 않고 제한된 overshoot로 반응함
1880
+ - drag-dismiss 허용 여부는 drag 세션 중 한 번 미리 확인되며, `onCloseAttempt`는 실제 release 또는 dismiss 경로에서만 호출됨
1881
+
1882
+ - 130ba90: ModalRoot now supports `canCloseAttempt` for side-effect-free close guards, and drag dismiss checks use it before release instead of calling `onCloseAttempt` during movement.
1883
+
1884
+ Migration Notes
1885
+ - drag 중 close 가능 여부를 미리 제한해야 하는 consumer는 `onCloseAttempt`와 같은 조건을 `canCloseAttempt`에도 전달
1886
+ - `onCloseAttempt`는 drag move 중에는 호출되지 않고 release 또는 실제 dismiss 경로에서만 호출
1887
+
1888
+ - 9bce29e: Modal bottom placement now uses `--oc-modal-bottom-top-clearance` to reserve top viewport space before sizing the sheet.
1889
+
1890
+ Migration Notes
1891
+ - bottom Modal의 상단 여백 기준이 `--oc-space-section-padding-viewport-y`에서 `--oc-modal-bottom-top-clearance`로 변경됨
1892
+ - 기본값은 `4rem`이며, 앱 header 높이를 반영해야 하는 consumer는 `--oc-modal-bottom-top-clearance: max(4rem, var(--app-header-height));` 형태로 override 가능
1893
+
1894
+ - 9bce29e: Agent artifact와 source guard가 component-owned selector의 `data-oc-*` namespace 정책을 명시합니다.
1895
+
1896
+ Migration Notes
1897
+ - consumer customization은 `data-oc-component`, component-owned `data-oc-*` visual/state selector, `data-oc-part` 조합을 기준으로 합니다.
1898
+ - CSS Module hash class, legacy compatibility attr, 취약한 DOM depth selector에 의존하지 않도록 agent artifact를 갱신합니다.
1899
+ - component-owned selector attr과 고정 accessibility attr이 consumer rest props로 덮이지 않도록 source authoring 규칙을 명시합니다.
1900
+ - Base UI attr(`data-side`, `data-starting-style`, `data-ending-style`)와 foundation `data-theme`는 예외 계약으로 유지합니다.
1901
+
1902
+ - 130ba90: Modal bottom sheet content drag now follows pointer-specific targets: touch can drag from content, while mouse and pen input drag from the sheet header or handle.
1903
+
1904
+ Migration Notes
1905
+ - desktop/fine pointer에서 `drag="content"` BottomSheet의 body content 영역 드래그가 더 이상 sheet drag를 시작하지 않음
1906
+ - mobile/touch에서는 기존 content drag를 유지하며, body scroll이 top이 아닐 때는 내부 스크롤을 우선함
1907
+ - header/handle에서 시작한 drag는 body scroll lock 상태와 관계없이 sheet drag로 처리됨
1908
+
1909
+ - 9bce29e: Public component root elements expose stable `data-oc-component` selectors alongside existing `data-oc-part` slot selectors.
1910
+
1911
+ Migration Notes
1912
+ - 신규 `data-oc-component` selector contract 추가
1913
+ - 기존 API, className, `data-oc-part` contract 변경 없음
1914
+
1915
+ - 9bce29e: Public 컴포넌트가 size, variant, appearance, viewport, invalid 상태 같은 시각 prop을 안정적인 `data-oc-*` selector로 노출합니다.
1916
+
1917
+ Migration Notes
1918
+ - `Button`, `Badge`, `TextButton`, `Divider`, `Loading`, `IconButton`, `BackgroundIconButton`, `Checkbox`, `Radio`, `Switch`, `Background`, `SectionHeader`, `MenuContent`, `ModalContent`가 `data-oc-size`, `data-oc-variant`, `data-oc-appearance`, `data-oc-viewport` 같은 시각 prop selector와 관련 상태 selector를 노출합니다.
1919
+ - `TextInput`, `TextArea`, `Select`가 invalid 상태일 때 `data-oc-invalid="true"`를 노출합니다.
1920
+ - `Checkbox`, `TextInput`, `ScrollArea`가 `data-oc-indeterminate`, `data-oc-interactive`, `data-oc-scroll`, `data-oc-scroll-container`, `data-oc-orientation`, `data-oc-state` 같은 namespaced internal selector를 노출하며 기존 호환 attr은 유지합니다.
1921
+ - `Loading`의 `role="status"`와 `aria-live="polite"` 기본 접근성 의미는 consumer prop으로 덮이지 않도록 유지합니다.
1922
+ - 기존 className, `data-oc-component`, `data-oc-part`, legacy `SectionHeader` `data-size` / `data-viewport` 계약은 유지합니다.
1923
+
1924
+ ### Migration Notes
1925
+
1926
+ - 없음
1927
+
1928
+ ## 0.6.4
1929
+
1930
+ ### Changes
1931
+
1932
+ <!-- generated:start -->
1933
+
1934
+ _Commit range: `@orioncactuscorp/ui@0.6.3..HEAD`_
1935
+
1936
+ #### Other
1937
+
1938
+ - `e35c0bf` 선택 컨트롤 드래그 방지 및 Modal 여백 정리 (#17)
1939
+ <!-- generated:end -->
1940
+
1941
+ ### Patch Changes
1942
+
1943
+ - e35c0bf: CheckMark, Checkbox, Radio 라벨의 WebKit 텍스트 선택을 방지합니다.
1944
+
1945
+ Migration Notes
1946
+ - 없음
1947
+
1948
+ - e35c0bf: Modal body container의 세로 여백 contract를 `--oc-modal-space-y`, `--oc-modal-container-space-y`, `--oc-modal-container-space-top`, `--oc-modal-container-space-bottom`으로 분리하고 footer가 있을 때 container 하단 여백을 제거합니다.
1949
+
1950
+ Migration Notes
1951
+ - Modal body container 기본 상단 여백이 header 높이만 반영하도록 변경됨
1952
+ - footer가 있는 Modal body container의 하단 여백이 footer 영역으로 이관됨
1953
+
1954
+ ### Migration Notes
1955
+
1956
+ - 없음
1957
+
1958
+ ## 0.6.3
1959
+
1960
+ ### Changes
1961
+
1962
+ <!-- generated:start -->
1963
+
1964
+ _Commit range: `@orioncactuscorp/ui@0.6.2..HEAD`_
1965
+
1966
+ - 생성할 commit log 없음
1967
+ <!-- generated:end -->
1968
+
1969
+ ### Patch Changes
1970
+
1971
+ - Agent migration artifact의 package version metadata를 실제 배포 버전과 동기화합니다.
1972
+
1973
+ Migration Notes
1974
+ - 없음
1975
+
1976
+ ### Migration Notes
1977
+
1978
+ - 없음
1979
+
1980
+ ## 0.6.2
1981
+
1982
+ ### Changes
1983
+
1984
+ <!-- generated:start -->
1985
+
1986
+ _Commit range: `@orioncactuscorp/ui@0.6.1..HEAD`_
1987
+
1988
+ #### Other
1989
+
1990
+ - `6acb6e4` Mobile-first SCSS 규칙 문서화 (#16)
1991
+ - `5c3eb69` VS Code CSS 변수 자동완성 artifact 추가 (#15)
1992
+ - `b252e2e` responsive foundation stops 분리 (#14)
1993
+ <!-- generated:end -->
1994
+
1995
+ ### Patch Changes
1996
+
1997
+ - b252e2e: responsive.config에서 typography와 spacing의 active stop range를 별도로 설정할 수 있도록 `$oc-responsive-typo-stops`, `$oc-responsive-space-stops` 옵션을 추가했습니다. spacing에는 두 mode Figma Viewport를 대응할 수 있는 `$oc-responsive-space-profile` stepped-points profile도 추가했습니다.
1998
+
1999
+ Migration Notes
2000
+ - 기존 `$oc-responsive-stops`만 사용하는 consumer는 변경 없음
2001
+ - typography 또는 spacing만 다른 responsive stop range가 필요하면 foundation별 stops 옵션 사용
2002
+ - spacing token의 base/media point 출력이 필요하면 `$oc-responsive-space-profile` 사용
2003
+ - `$oc-space-overrides`에서 stop 값을 `null`로 지정하면 해당 stop은 정의되지 않은 것으로 취급
2004
+
2005
+ - 5c3eb69: VS Code CSS variable 자동완성을 위한 `dist/vscode/oc-ui-vars.css` package artifact를 추가합니다.
2006
+
2007
+ Migration Notes
2008
+ - `phoenisx.cssvar` 확장을 사용하는 consumer는 `.vscode/settings.json`의 `cssvar.files`에 `./node_modules/@orioncactuscorp/ui/dist/vscode/oc-ui-vars.css`를 추가하면 설치된 oc-ui 버전의 foundation `--oc-*` token 자동완성을 사용할 수 있음
2009
+
2010
+ ### Migration Notes
2011
+
2012
+ - 기존 `$oc-responsive-stops`만 사용하는 consumer는 변경 없음
2013
+ - typography 또는 spacing만 다른 responsive stop range가 필요하면 foundation별 stops 옵션 사용
2014
+ - spacing token의 base/media point 출력이 필요하면 `$oc-responsive-space-profile` 사용
2015
+ - `$oc-space-overrides`에서 stop 값을 `null`로 지정하면 해당 stop은 정의되지 않은 것으로 취급
2016
+ - `phoenisx.cssvar` 확장을 사용하는 consumer는 `.vscode/settings.json`의 `cssvar.files`에 `./node_modules/@orioncactuscorp/ui/dist/vscode/oc-ui-vars.css`를 추가하면 설치된 oc-ui 버전의 foundation `--oc-*` token 자동완성을 사용할 수 있음
2017
+
2018
+ ## 0.6.1
2019
+
2020
+ ### Changes
2021
+
2022
+ <!-- generated:start -->
2023
+
2024
+ _Commit range: `@orioncactuscorp/ui@0.6.0..HEAD`_
2025
+
2026
+ #### Documentation
2027
+
2028
+ - `c44b9fb` docs(skill): add ui release workflow
2029
+ - `c9ced18` docs(release): align agent artifact versions
2030
+ <!-- generated:end -->
2031
+
2032
+ ### Patch Changes
2033
+
2034
+ - Agent artifact version metadata를 package version과 동기화하고 consumer migration 예시 버전을 placeholder로 명확히 정리합니다.
2035
+
2036
+ Migration Notes
2037
+ - 없음
2038
+
2039
+ ### Migration Notes
2040
+
2041
+ - 없음
2042
+
2043
+ ## 0.6.0
2044
+
2045
+ ### Changes
2046
+
2047
+ <!-- generated:start -->
2048
+
2049
+ _Commit range: `@orioncactuscorp/ui@0.5.3..HEAD`_
2050
+
2051
+ #### Documentation
2052
+
2053
+ - `2e5ca55` docs: update SCSS grouping guidelines
2054
+
2055
+ #### Maintenance
2056
+
2057
+ - `db2c070` ci(release): gate release workflow by commit prefix
2058
+
2059
+ #### Other
2060
+
2061
+ - `e2774e5` Storybook 다크 모드 문서 테마 동기화 (#12)
2062
+ - `844ed2e` SectionHeader 컴포넌트 추가 (#11)
2063
+ - `282fabb` Modal 컴포넌트 추가 및 BottomSheet 인터랙션 정리 (#13)
2064
+ <!-- generated:end -->
2065
+
2066
+ ### Minor Changes
2067
+
2068
+ - 282fabb: `Modal` compound component를 추가합니다.
2069
+
2070
+ Migration Notes
2071
+ - 신규 API: `Modal`, `ModalRoot`, `ModalTrigger`, `ModalContent`, `ModalHeader`, `ModalBody`, `ModalFooter`, `ModalClose`
2072
+ - 신규 close guard API: `ModalRoot`의 `onCloseAttempt`는 닫기 버튼, backdrop, outside press, escape key, drag dismiss 같은 닫힘 시도를 하나의 contract로 전달하며 `false`를 반환하면 닫힘을 막습니다.
2073
+ - 신규 `data-oc-*` contract: `data-oc-part="backdrop|viewport|bottom-fill|surface|header|handle|header-inner|header-leading|header-title|header-trailing|close|body|body-container|footer"`
2074
+ - 신규 CSS 변수 contract: `--oc-modal-header-height`, `--oc-modal-footer-height`, `--oc-modal-peek-height`, `--oc-modal-sheet-height`, `--oc-modal-translate-y`, `--oc-modal-overshoot-fill-height`, `--oc-modal-backdrop-opacity`
2075
+ - `variant="adaptive"`는 모바일에서 BottomSheet, 데스크톱에서 Popup 형태로 동작합니다.
2076
+ - BottomSheet는 `md` 이하에서 size와 무관하게 full width로 표시되고, `min md` 이상에서는 Popup과 동일한 size별 max-width를 사용합니다.
2077
+ - `ModalContent`의 기본 drag 동작은 `content`이며, BottomSheet에서 본문 영역을 드래그해 이동할 수 있습니다.
2078
+ - BottomSheet의 `presentationState="peeked"`는 modal trap을 해제한 docked panel 상태이며, 실제 닫힘은 `open={false}`입니다. `peekable`을 켠 경우에만 닫기 전에 peeked 상태로 걸치며, `peekHeight`를 생략하면 Header 높이를 peek 높이로 사용합니다.
2079
+ - BottomSheet는 최대로 열린 상태에서 위로 드래그하거나 peeked 상태에서 아래로 드래그하면 저항감 있는 overshoot를 제공하고, release 시 유효한 snap 위치로 복귀합니다.
2080
+ - BottomSheet overshoot fill은 BottomSheet surface와 동일한 size별 width를 따릅니다.
2081
+ - BottomSheet drag 중 backdrop opacity는 inline `opacity`가 아니라 `--oc-modal-backdrop-opacity`로 제어되어 close ending transition을 덮지 않습니다.
2082
+ - BottomSheet를 짧게 빠르게 아래로 드래그하면 닫히지 않고 원위치로 복귀하며, 닫힘 거리까지 내려간 경우에는 하단으로 settle한 뒤 닫힙니다.
2083
+ - `onCloseAttempt`가 BottomSheet drag dismiss를 막으면 닫히지 않고 기존 위치로 복귀합니다. `disablePointerDismissal`을 켜면 drag dismiss를 close 후보로 보지 않고 아래쪽 resistant overshoot로 처리합니다.
2084
+ - BottomSheet에 `snapPoints`가 있으면 빠른 drag release는 기본적으로 방향 기준 인접 snap point로 이동하되, drag 위치가 여러 snap point를 지나친 경우 가장 멀리 지나친 snap point로 이동합니다.
2085
+ - BottomSheet drag release transition은 vaul drawer와 동일한 `0.5s cubic-bezier(0.32, 0.72, 0, 1)` easing을 사용합니다.
2086
+ - Popup surface의 닫힘 transition은 `0.2s ease-in`을 사용하며, backdrop과 BottomSheet motion은 기존 easing을 유지합니다.
2087
+ - Header는 content 위에 overlay되고, Background의 `strong` variant와 `elevated-normal` back color를 사용해 compact backdrop blur를 제공합니다.
2088
+ - `Body` ScrollArea vertical scrollbar는 Header overlay 아래에서 시작합니다.
2089
+ - Header handle은 BottomSheet placement에서 `drag="handle"` 또는 `drag="content"`일 때만 렌더링됩니다.
2090
+ - `Footer`는 향후 ActionArea 도입을 위한 하단 액션 슬롯으로 `Body` 외부에 렌더링됩니다.
2091
+
2092
+ - 844ed2e: `SectionHeader` 컴포넌트를 추가합니다.
2093
+ - `size`: `large` | `medium` | `small` | `xsmall` (기본값: `medium`)
2094
+ - `viewport`: `auto` | `mobile` | `desktop` (기본값: `auto`) — md 브레이크포인트 기준 자동 반응형, 또는 고정 모드
2095
+ - `as`: `h1`~`h6` heading 태그 override (size별 기본값: large→h2, medium→h3, small→h4, xsmall→h5)
2096
+ - `headingSlot`: 제목 옆 슬롯 (max-height를 heading line-height에 맞춰 자동 정렬)
2097
+ - `trailingSlot`: 우측 슬롯 (동일)
2098
+ - `description`: 부가 설명 (`xsmall`에서는 렌더링되지 않음)
2099
+
2100
+ ### Migration Notes
2101
+
2102
+ - `Modal`, `SectionHeader` 신규 public API가 추가됩니다.
2103
+ - `ModalRoot`의 `onCloseAttempt`, `ModalContent`의 BottomSheet 관련 prop, Modal CSS 변수와 `data-oc-*` slot contract를 consumer에서 사용할 수 있습니다.
2104
+ - 기존 API 제거 또는 필수 consumer 수정 사항은 없습니다.
2105
+
2106
+ ## 0.5.3
2107
+
2108
+ ### Changes
2109
+
2110
+ <!-- generated:start -->
2111
+
2112
+ _Commit range: `@orioncactuscorp/ui@0.5.2..HEAD`_
2113
+
2114
+ #### Fixes
2115
+
2116
+ - `f7a0ea1` fix(fieldset): align layout spacing with content slot
2117
+ <!-- generated:end -->
2118
+
2119
+ ### Patch Changes
2120
+
2121
+ - f7a0ea1: FieldsetContent를 추가하고 Fieldset의 기본 layout spacing을 Field와 같은 label/control gap contract로 정렬합니다.
2122
+
2123
+ Migration Notes
2124
+ - `FieldsetContent`를 public slot으로 추가합니다.
2125
+ - `Fieldset`은 native `fieldset`/`legend` 렌더링과 Safari 호환성을 유지하면서 legend 이후 children을 content slot으로 감싸 `Field`와 동일한 `--oc-space-item-gap-xsmall` spacing contract를 사용합니다.
2126
+
2127
+ ### Migration Notes
2128
+
2129
+ - `FieldsetContent`를 public slot으로 추가합니다.
2130
+ - `Fieldset`은 native `fieldset`/`legend` 렌더링과 Safari 호환성을 유지하면서 legend 이후 children을 content slot으로 감싸 `Field`와 동일한 `--oc-space-item-gap-xsmall` spacing contract를 사용합니다.
2131
+
2132
+ ## 0.5.2
2133
+
2134
+ ### Changes
2135
+
2136
+ <!-- generated:start -->
2137
+
2138
+ _Commit range: `@orioncactuscorp/ui@0.5.1..HEAD`_
2139
+
2140
+ #### Fixes
2141
+
2142
+ - `64ade6f` fix(fieldset): align legend label styling
2143
+ <!-- generated:end -->
2144
+
2145
+ ### Patch Changes
2146
+
2147
+ - 64ade6f: FieldLegend의 시각 스타일을 FieldLabel과 같은 label contract로 정렬합니다.
2148
+
2149
+ Migration Notes
2150
+ - `FieldLegend`는 semantic element로 `<legend>`를 유지하지만, CSS Module slot class는 FieldLabel과 같은 `label` 스타일을 사용합니다.
2151
+ - 기존 `FieldLegend`의 typography weight와 label color가 `FieldLabel`과 동일하게 바뀝니다.
2152
+
2153
+ ### Migration Notes
2154
+
2155
+ - 없음
2156
+
2157
+ ## 0.5.1
2158
+
2159
+ ### Changes
2160
+
2161
+ <!-- generated:start -->
2162
+
2163
+ _Commit range: `@orioncactuscorp/ui@0.5.0..HEAD`_
2164
+
2165
+ #### Other
2166
+
2167
+ - `4f920c3` oc-website 마이그레이션 지원 컴포넌트 정리 (#10)
2168
+ <!-- generated:end -->
2169
+
2170
+ ### Patch Changes
2171
+
2172
+ - 4f920c3: ScrollArea의 root/window 스크롤 호환성을 개선하고 터치 디바이스 fallback을 안정화합니다.
2173
+
2174
+ Migration Notes
2175
+ - 기존 ScrollArea API 변경 없음
2176
+ - root 모드에서 container overflow가 window 스크롤을 가로막지 않도록 조정
2177
+ - ScrollArea scrollbar selector는 legacy `[data-label='scrollbar']`가 아니라 `[data-oc-part='scrollbar-vertical']`, `[data-oc-part='scrollbar-horizontal']` contract를 기준으로 갱신 필요
2178
+
2179
+ - 4f920c3: 배포 산출물에서 React client component directive가 유지되도록 빌드 후처리를 추가합니다.
2180
+
2181
+ Migration Notes
2182
+ - 없음
2183
+
2184
+ - 4f920c3: FieldLegend에 required 표시 contract를 추가합니다.
2185
+
2186
+ Migration Notes
2187
+ - `FieldLegend`는 `required` prop을 받아 `[data-oc-part='required-mark']` slot으로 필수 표시를 렌더링합니다.
2188
+ - 여러 control을 하나의 필수 그룹으로 표현하는 경우 `FieldLabel`이 아니라 `Fieldset`과 `FieldLegend required`를 사용해야 합니다.
2189
+ - 실제 native validation 의미는 각 필수 control의 `required` attribute로 전달해야 합니다.
2190
+
2191
+ - 4f920c3: FieldLabel에 required 표시 contract를 추가합니다.
2192
+
2193
+ Migration Notes
2194
+ - `FieldLabel`은 `required` prop을 받아 `[data-oc-part='required-mark']` slot으로 필수 표시를 렌더링합니다.
2195
+ - 실제 native validation 의미는 기존처럼 `TextInput`, `TextArea`, `Select` 같은 control의 `required` attribute로 전달해야 합니다.
2196
+
2197
+ ### Migration Notes
2198
+
2199
+ - 없음
2200
+
2201
+ ## 0.5.0
2202
+
2203
+ ### Changes
2204
+
2205
+ <!-- generated:start -->
2206
+
2207
+ _Commit range: `@orioncactuscorp/ui@0.4.2..HEAD`_
2208
+
2209
+ #### Features
2210
+
2211
+ - `a4a3db5` feat(tokens): add SCSS theme selection config
2212
+
2213
+ #### Other
2214
+
2215
+ - `13ab787` website 공용 컴포넌트 승격 (#7)
2216
+ - `bd6ef71` SCSS 테마 selection config 대응 (#8)
2217
+ <!-- generated:end -->
2218
+
2219
+ ### Minor Changes
2220
+
2221
+ - 13ab787: website 공용 UI 후보를 package component surface로 확장합니다.
2222
+ - `Badge`, `Background`, `Divider`, `Loading`, `Cell`, `CellItem` 추가
2223
+ - `Field`, `FieldLabel`, `FieldControl`, `FieldMessage`, `FieldErrorMessage` 추가
2224
+ - `Fieldset`, `FieldLegend`, `FieldGroup` 추가
2225
+ - `Checkbox`, `CheckMark`, `Radio`, `Switch`, `TextInput`, `TextArea`, `Select` 추가
2226
+ - `MenuRoot`, `MenuTrigger`, `MenuContent`, `MenuItem`, `MenuSeparator` 추가
2227
+ - `TooltipProvider`, `TooltipRoot`, `TooltipTrigger`, `TooltipContent` 추가
2228
+ - `ScrollArea`, `ScrollAreaContainer` 추가
2229
+ - `Background`의 `frontColor`, `backColor`, `Cell`의 `padding`, `Divider`의 `variant` prop 추가
2230
+ - `Divider`는 `variant`만 public appearance prop으로 제공합니다.
2231
+ - `Loading`의 `small`, `medium`, `large`, `custom` size contract 추가
2232
+ - `Checkbox`의 `indeterminate` 시각 상태가 `checked`보다 우선하도록 보정
2233
+ - `Switch` track을 `Checkbox`와 같은 body1-height control slot 기준으로 정렬
2234
+ - `Switch` interaction layer를 track 크기에 맞추고 thumb stacking과 pointer event 처리를 보정
2235
+ - `TextInput`, `TextArea`, `Select` stroke와 focus outline을 inset box-shadow 기반으로 보정
2236
+ - `IconCaretDown`, `IconCaretUp`을 추가하고 `Select` indicator를 caret icon slot 구조로 보정
2237
+ - `inset-stroke` SCSS mixin을 추가하고 fractional surface stroke 보정을 중앙화
2238
+ - `Cell`, `MenuItem`의 인접 item separator를 structural border 기반으로 보정
2239
+ - `TextField`는 `TextInput`, `TextareaField`는 `TextArea`, `SelectField`는 `Select`로 component/export 이름 확정
2240
+ - `Button`에 `loading` prop 추가 및 loading 중 activation 차단
2241
+ - `Button` loading indicator의 색상, 크기, 중앙 정렬을 버튼 state/size contract에 맞게 보정
2242
+ - `Button` anchor loading 중 middle-click activation 차단
2243
+ - `FieldControl`의 ARIA 연결이 실제 렌더링된 label/message만 참조하도록 보정
2244
+ - `MenuTrigger`가 기본 trigger 렌더링에서도 `nativeButton` prop을 전달하도록 보정
2245
+ - `ScrollArea`의 global scrollbar style cleanup을 multi-instance 기준으로 보정
2246
+ - `@base-ui-components/react`를 runtime dependency로 추가
2247
+
2248
+ ### Migration Notes
2249
+ - website 원본의 layered background, badge overlay, loading stroke animation, custom scrollbar, touch tooltip 동작을 package component contract로 유지합니다.
2250
+ - `Loading` 기본 크기는 website 원본과 같은 `large`이며, `large=48px`, `medium=24px`, `small=16px`입니다.
2251
+ - `Loading`은 기본적으로 `currentColor`를 따르며, `Button` 내부 loading indicator는 버튼 size와 disabled state contract를 따릅니다.
2252
+ - `Checkbox`는 `checked`와 `indeterminate`가 동시에 참일 때 mixed 표시를 우선합니다.
2253
+ - `CheckMark`는 indeterminate 상태가 없는 check-only checkbox control입니다.
2254
+ - `Switch` label은 `Checkbox`와 같은 `data-oc-part="content"` 내부에 렌더링되며 control은 body1-height 기준으로 정렬됩니다.
2255
+ - `Switch`의 interaction layer는 track과 같은 크기이며, thumb는 interaction 위에 렌더링되지만 pointer event를 가로채지 않습니다.
2256
+ - `TextInput`, `TextArea`, `Select`는 border 대신 inset `box-shadow`로 기본 stroke와 active outline을 표현합니다.
2257
+ - `Checkbox`, `Radio`의 1.5px surface stroke는 `inset-stroke` SCSS mixin을 통해 WebKit/DPR 보정을 적용합니다.
2258
+ - `Cell`, `MenuItem`의 item 사이 separator는 `box-shadow`가 아니라 인접 item의 `border-block-start`로 표현합니다.
2259
+ - `TextField`, `TextareaField`, `SelectField` 이름은 제공하지 않습니다. 각각 `TextInput`, `TextArea`, `Select`를 사용해야 합니다.
2260
+ - `Divider`의 선 색상 강도는 `variant`를 사용해야 합니다.
2261
+ - `FieldControl`은 `FieldLabel`, `FieldMessage`, `FieldErrorMessage`가 실제 렌더링된 경우에만 해당 id를 ARIA로 연결합니다.
2262
+ - website의 `InputGroup`, `CheckboxGroup`, `RadioGroup`은 canonical API로 승격하지 않습니다.
2263
+ - 단일 control label/helper/error 연결은 `Field` compound family를 사용해야 합니다.
2264
+ - checkbox/radio/switch option 묶음은 `Fieldset` 또는 migration alias인 `FieldGroup`을 사용해야 합니다.
2265
+ - 기존 `TextInput` wrapper는 `Field`와 `TextInput` 또는 `TextArea` 조합으로 치환해야 합니다.
2266
+ - `Menu`와 `Tooltip`은 Base UI 기반이지만 Base UI 타입을 consumer API로 직접 노출하지 않습니다.
2267
+
2268
+ - a4a3db5: color theme 선택 SCSS 설정 추가
2269
+
2270
+ `foundations/color.config` 모듈을 추가해 SCSS 빌드 단에서 light/dark theme emit 여부와 `prefers-color-scheme` 미디어쿼리 사용 여부를 선택할 수 있도록 한다.
2271
+ - `$oc-color-themes` (`!default`: `(light, dark)`) — 둘 중 하나만 두면 해당 theme의 `:root`/`[data-theme]` ruleset만 emit. 빈 값이거나 `light`/`dark` 외 값이 들어오면 `@error`.
2272
+ - `$oc-color-system-preference` (`!default`: `true`) — `false`로 설정하면 `@media (prefers-color-scheme: dark)` ruleset이 빠지고 attribute 토글만 남음. `themes`가 `(dark)` 단독이면 `:root`가 곧장 dark이므로 이 옵션은 무시됨.
2273
+
2274
+ 기존 consumer는 변경 없음. 사용 예:
2275
+
2276
+ ```scss
2277
+ @use '@orioncactuscorp/ui/scss/foundations/color.config' with (
2278
+ $oc-color-themes: (
2279
+ light,
2280
+ )
2281
+ );
2282
+ @use '@orioncactuscorp/ui/scss/index';
2283
+ ```
2284
+
2285
+ ### Migration Notes
2286
+ - 없음
2287
+
2288
+ ## 0.4.2
2289
+
2290
+ ### Changes
2291
+
2292
+ <!-- generated:start -->
2293
+
2294
+ _Commit range: `@orioncactuscorp/ui@0.4.0..HEAD`_
2295
+
2296
+ #### Fixes
2297
+
2298
+ - `bd6fadb` fix(tokens): compile alpha theme variables
2299
+ <!-- generated:end -->
2300
+
2301
+ ### Patch Changes
2302
+
2303
+ - Button primary interaction overlay를 `0.3.1` 동작에 맞춥니다.
2304
+
2305
+ ### Migration Notes
2306
+ - 없음
2307
+
2308
+ - Agent migration manifest의 package version 표기를 `0.4.2`로 맞춥니다.
2309
+
2310
+ ### Migration Notes
2311
+ - 없음
2312
+
2313
+ ## 0.4.1
2314
+
2315
+ ### Changes
2316
+
2317
+ <!-- generated:start -->
2318
+
2319
+ _Commit range: `@orioncactuscorp/ui@0.4.0..HEAD`_
2320
+
2321
+ - 생성할 commit log 없음
2322
+ <!-- generated:end -->
2323
+
2324
+ ### Patch Changes
2325
+
2326
+ - Foundation color theme CSS에서 `oc-alpha(...)` Sass helper가 raw CSS 함수처럼 남지 않도록 컴파일합니다.
2327
+
2328
+ ### Migration Notes
2329
+ - 없음
2330
+
2331
+ - Agent migration manifest의 package version 표기를 `0.4.1`로 맞춥니다.
2332
+
2333
+ ### Migration Notes
2334
+ - 없음
2335
+
2336
+ ## 0.4.0
2337
+
2338
+ ### Changes
2339
+
2340
+ <!-- generated:start -->
2341
+
2342
+ _Commit range: `@orioncactuscorp/ui@0.3.1..HEAD`_
2343
+
2344
+ #### Features
2345
+
2346
+ - `60b738e` feat(button): add Figma solid and outlined variants
2347
+ - `a47fa46` feat(button): add default surface
2348
+ - `fc1f090` feat(typo): add default font family token
2349
+ - `b30d374` feat(tokens): add global color palette
2350
+ - `3d99493` feat(tokens): refine theme label colors
2351
+ - `310a7c5` feat(tokens): add accent global color steps
2352
+ - `a5e4766` feat(tokens): add accent and inverse theme colors
2353
+ - `44b7d17` feat(tokens): add static transparent tokens
2354
+
2355
+ #### Fixes
2356
+
2357
+ - `8d97f6e` fix(button): expose default variant
2358
+
2359
+ #### Refactors
2360
+
2361
+ - `de21eca` refactor(typo): make font family token configurable
2362
+ - `56fcd31` refactor(tokens): migrate theme color aliases
2363
+ - `ce5e2fc` refactor(tokens): align status theme aliases
2364
+ - `36625a1` refactor(scss): add alpha color helper
2365
+ - `e5c6664` refactor(button): align button family prop contracts
2366
+
2367
+ #### Documentation
2368
+
2369
+ - `1dd9b2a` docs: document responsive foundation profiles (#5)
2370
+ - `8ba6ba9` docs: remove completed todo items
2371
+ - `d6f3b5c` docs: organize component expansion TODOs
2372
+ - `bb2d6eb` docs(figma): document design translation pipeline
2373
+ - `d3044ed` docs(figma): add semantic DOM mapping guidance
2374
+ - `b56f087` docs(agent): define consumer convention migration
2375
+ - `3e8a298` docs(agent): ship consumer convention artifacts
2376
+ - `e33580f` docs(agent): link consumer convention workflow
2377
+ - `99e0984` docs(agent): add consumer instruction prompts
2378
+ - `ed018b1` docs(agent): add component audit guidance
2379
+ - `779acb0` docs(storybook): show Button source examples
2380
+ - `b8511d3` docs(agent): add Figma token guardrails
2381
+ - `2a65e90` docs(todo): note Button loading follow-up
2382
+ - `9ccda7e` docs(agent): add montage reference priority
2383
+ - `7216df4` docs(tokens): update color token migration guidance
2384
+ - `e7e9a69` docs(agents): document release changelog phases
2385
+ - `a65971e` docs(tokens): prune completed color token notes
2386
+ - `ae28782` docs(agent): clarify component reference priority
2387
+ - `593d51d` docs(agents): document PR changeset policy
2388
+ - `9db0656` docs(agents): document component API contracts
2389
+
2390
+ #### Maintenance
2391
+
2392
+ - `0576874` chore(release): generate changelog during version bump
2393
+ - `b7ab8f1` chore(stylelint): align SCSS namespace rule
2394
+
2395
+ #### Other
2396
+
2397
+ - `8512578` 소비자 시나리오 프리뷰 추가 (#6)
2398
+ <!-- generated:end -->
2399
+
2400
+ ### Patch Changes
2401
+
2402
+ - Button, TextButton, IconButton, BackgroundIconButton props contract를 native element attribute 기반으로 정리합니다. React 19+ ref prop contract에 맞춰 button family의 forwardRef wrapper를 제거합니다.
2403
+
2404
+ ### Migration Notes
2405
+
2406
+ - `0.3.1`에서 `0.4.0`으로 업데이트할 때는 color token contract 변경을 확인해야 합니다.
2407
+ - `Button`에 `appearance`, `variant`, `size`, `fullWidth`, `leadingIcon`, `trailingIcon`, `icon` prop이 추가되었습니다.
2408
+ - `Button`의 기본 `variant`는 `primary`가 아니라 `default`입니다. 기존 primary surface가 필요하면 `variant='primary'`를 명시해야 합니다.
2409
+ - `Button`의 `variant='secondary'`는 `appearance='solid'`에서 `primary`로 fallback되고, `appearance='outlined'`에서 secondary outlined surface로 동작합니다.
2410
+ - `Button`의 `children`은 optional이 되었고 icon-only 사용이 가능합니다. `icon`만 사용하는 경우 `aria-label` 또는 `aria-labelledby`를 함께 제공해야 합니다.
2411
+ - `href`가 있는 disabled `Button`은 anchor에 `aria-disabled='true'`와 `tabIndex={-1}`를 적용하고 click 기본 동작을 막습니다.
2412
+ - `href`가 있는 Button은 anchor native attribute를, 없는 Button은 button native attribute를 기준으로 타입 검사합니다.
2413
+ - TextButton은 `as` 값에 맞는 anchor/button/span native attribute를 기준으로 타입 검사합니다.
2414
+ - IconButton과 BackgroundIconButton은 button native attribute를 기준으로 타입 검사합니다.
2415
+ - button family ref는 React 19+의 function component ref prop으로 전달합니다.
2416
+ - `--oc-color-theme-accent-blue` 참조는 `--oc-color-theme-accent-background-blue`로 교체해야 합니다.
2417
+ - `--oc-color-theme-dimmer` 참조는 `--oc-color-theme-material-dimmer`로 교체해야 합니다.
2418
+ - `--oc-color-theme-status-positive`, `--oc-color-theme-status-cautionary`, `--oc-color-theme-status-negative`는 accent background alias를 기준으로 정렬되었습니다. 상태 색상을 직접 override하는 consumer는 신규 accent background token과 함께 의도한 값이 유지되는지 확인해야 합니다.
2419
+ - 신규 accent background/foreground theme token, inverse theme token, global color palette, accent global color step, static transparent token이 추가되었습니다.
2420
+ - PR #6의 consumer scenario preview 추가는 package runtime migration을 요구하지 않습니다.
2421
+
2422
+ ## 0.3.1
2423
+
2424
+ - responsive foundation의 stepped emitter 전환 지점 계산을 수정했습니다.
2425
+
2426
+ ## 0.2.0
2427
+
2428
+ - `TextButton`, `BackgroundIconButton` 컴포넌트 추가
2429
+ - `orioncactus` icon set 전체 제공 및 `@orioncactuscorp/ui/icons/orioncactus` subpath export 추가
2430
+ - root barrel은 기본 API surface 유지를 위해 `IconDefault`만 유지
2431
+ - `IconButton`, `BackgroundIconButton`의 icon `viewBox` 보존 동작 개선
2432
+
2433
+ ## 0.1.1
2434
+
2435
+ - `Interaction` self-driven overlay 정리 및 keyboard active feedback 보강
2436
+ - CSS module build artifact 정리 순서 개선
2437
+ - website consumer 검증을 위한 GitHub Packages patch release
2438
+
2439
+ ## 0.1.0
2440
+
2441
+ - `@orioncactuscorp/ui` 초기 private package 릴리스
2442
+ - Foundation tokens, reset, SCSS mixins, responsive typography pipeline 추가
2443
+ - `Button`, `IconButton`, `SvgIcon`, `Interaction`, `IconDefault` 제공
2444
+ - `orioncactus` 기본 icon set 및 `material-rounded` placeholder subpath 추가
2445
+ - Storybook, Vitest, Playwright, Next.js example 기반 검증 구성