@reopt-ai/opt-ui 1.4.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/COMPONENT_CATALOG.md +374 -84
  2. package/README.md +28 -7
  3. package/dist/app.css +146 -0
  4. package/dist/core/index.cjs +164 -324
  5. package/dist/core/index.d.cts +3 -5
  6. package/dist/core/index.d.ts +3 -5
  7. package/dist/core/index.js +3 -323
  8. package/dist/docs/01-getting-started.md +25 -5
  9. package/dist/docs/02-components/01-core.md +192 -46
  10. package/dist/docs/02-components/02-visuals.md +1 -1
  11. package/dist/docs/02-components/03-shells.md +177 -42
  12. package/dist/docs/02-components/04-surfaces.md +1 -1
  13. package/dist/docs/02-components/index.md +1 -1
  14. package/dist/docs/03-recipes/03-layouts.md +20 -12
  15. package/dist/docs/04-theming.md +3 -1
  16. package/dist/docs/05-migration/01-breaking-changes.md +28 -0
  17. package/dist/id-registry.cjs +1899 -1872
  18. package/dist/id-registry.d.cts +13 -10
  19. package/dist/id-registry.d.cts.map +1 -0
  20. package/dist/id-registry.d.ts +13 -10
  21. package/dist/id-registry.d.ts.map +1 -0
  22. package/dist/id-registry.js +1897 -1871
  23. package/dist/id-registry.js.map +1 -0
  24. package/dist/id-registry.json +44 -44
  25. package/dist/index.cjs +8294 -9613
  26. package/dist/index.d.cts +1486 -1438
  27. package/dist/index.d.cts.map +1 -0
  28. package/dist/index.d.ts +1486 -1438
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +7933 -9600
  31. package/dist/index.js.map +1 -0
  32. package/dist/meta.cjs +7461 -6765
  33. package/dist/meta.d.cts.map +1 -0
  34. package/dist/meta.d.ts.map +1 -0
  35. package/dist/meta.js +7460 -6736
  36. package/dist/meta.js.map +1 -0
  37. package/dist/pagination-By7Ozv3U.js +3788 -0
  38. package/dist/pagination-By7Ozv3U.js.map +1 -0
  39. package/dist/pagination-Uv3CnGJz.cjs +4677 -0
  40. package/dist/shader-surface-BK1GMt5_.d.cts +1788 -0
  41. package/dist/shader-surface-BK1GMt5_.d.cts.map +1 -0
  42. package/dist/shader-surface-BWhO2xkk.js +3715 -0
  43. package/dist/shader-surface-BWhO2xkk.js.map +1 -0
  44. package/dist/shader-surface-DIVWtpFl.d.ts +1788 -0
  45. package/dist/shader-surface-DIVWtpFl.d.ts.map +1 -0
  46. package/dist/shader-surface-DxLLfrE6.cjs +4108 -0
  47. package/dist/shells/index.cjs +51 -65
  48. package/dist/shells/index.d.cts +4 -5
  49. package/dist/shells/index.d.ts +4 -5
  50. package/dist/shells/index.js +3 -64
  51. package/dist/tailwind.css +54 -5
  52. package/dist/theme/presets/default.css +12 -12
  53. package/dist/theme/server.cjs +310 -0
  54. package/dist/theme/server.d.cts +117 -0
  55. package/dist/theme/server.d.cts.map +1 -0
  56. package/dist/theme/server.d.ts +117 -0
  57. package/dist/theme/server.d.ts.map +1 -0
  58. package/dist/theme/server.js +287 -0
  59. package/dist/theme/server.js.map +1 -0
  60. package/dist/types-D0FlcYnM.d.cts +301 -0
  61. package/dist/types-D0FlcYnM.d.cts.map +1 -0
  62. package/dist/types-D0FlcYnM.d.ts +301 -0
  63. package/dist/types-D0FlcYnM.d.ts.map +1 -0
  64. package/dist/visuals/index.cjs +10 -4
  65. package/dist/visuals/index.d.cts +2 -1
  66. package/dist/visuals/index.d.ts +2 -1
  67. package/dist/visuals/index.js +1 -2
  68. package/dist/workflow-canvas-3Jeevkgy.cjs +2599 -0
  69. package/dist/workflow-canvas-BGBAcjf-.js +2403 -0
  70. package/dist/workflow-canvas-BGBAcjf-.js.map +1 -0
  71. package/dist/workflow-canvas-Bar_O2SQ.d.ts +494 -0
  72. package/dist/workflow-canvas-Bar_O2SQ.d.ts.map +1 -0
  73. package/dist/workflow-canvas-DghDRtHn.d.cts +494 -0
  74. package/dist/workflow-canvas-DghDRtHn.d.cts.map +1 -0
  75. package/package.json +24 -8
  76. package/dist/chunk-3GWWZKX7.js +0 -38
  77. package/dist/chunk-AFF2HPE5.cjs +0 -5008
  78. package/dist/chunk-ELWICXYY.js +0 -4745
  79. package/dist/chunk-N4NDU5ET.cjs +0 -4745
  80. package/dist/chunk-ONE3C5RV.cjs +0 -38
  81. package/dist/chunk-QWBHD54V.js +0 -3218
  82. package/dist/chunk-RBM2RNC2.js +0 -5008
  83. package/dist/chunk-X5WCXJAF.cjs +0 -3218
  84. package/dist/index-BZ_lBlO1.d.ts +0 -474
  85. package/dist/index-BuvxoWHf.d.cts +0 -474
  86. package/dist/index-DlAcuvQp.d.cts +0 -1686
  87. package/dist/index-Slu5hOj1.d.ts +0 -1686
  88. package/dist/types-D4-0lwaE.d.cts +0 -298
  89. package/dist/types-D4-0lwaE.d.ts +0 -298
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Core Components"
3
3
  description: "59 Core layer components — props, examples, keyboard shortcuts."
4
- version: "1.4.1"
4
+ version: "1.6.0"
5
5
  generated: true
6
6
  ---
7
7
 
@@ -117,6 +117,13 @@ const store = useFormStore({ defaultValues: { name: "" } });
117
117
  | `disabledReason` | `string` | | | aria-disabled 상태에서 노출할 비활성 사유 |
118
118
  | `labels` | `NumberInputLabels` | | | 입력/증감/clear/invalid 접근성 문구 |
119
119
 
120
+ **Keyboard Shortcuts:**
121
+
122
+ | Keys | Action |
123
+ | ---- | ------------------- |
124
+ | `↑` | 값 증가 (step 단위) |
125
+ | `↓` | 값 감소 (step 단위) |
126
+
120
127
  ### Checkbox
121
128
 
122
129
  > 독립적인 체크박스 컴포넌트. 레이블, 설명, 그룹과 DOM property까지 동기화되는 indeterminate 상태를 지원합니다.
@@ -172,6 +179,14 @@ const store = useFormStore({ defaultValues: { name: "" } });
172
179
  | `description` | `string` | | | 레이블 아래 설명 텍스트 |
173
180
  | `size` | `"sm" \| "md" \| "lg"` | | "md" | 라디오 크기 |
174
181
 
182
+ **Keyboard Shortcuts:**
183
+
184
+ | Keys | Action |
185
+ | ------- | ------------------- |
186
+ | `↑ ↓` | 라디오 옵션 간 탐색 |
187
+ | `← →` | 라디오 옵션 간 탐색 |
188
+ | `Space` | 현재 옵션 선택 |
189
+
175
190
  ### Switch
176
191
 
177
192
  > 토글 스위치 컴포넌트. 3가지 크기와 레이블/설명의 명시적 접근성 연결을 지원합니다.
@@ -234,6 +249,15 @@ const store = useFormStore({ defaultValues: { name: "" } });
234
249
  | `children` | `ReactNode` | Yes | | 옵션 레이블 |
235
250
  | `className` | `string` | | | 기본 스타일 오버라이드 |
236
251
 
252
+ **Keyboard Shortcuts:**
253
+
254
+ | Keys | Action |
255
+ | --------------- | -------------- |
256
+ | `↑ ↓` | 옵션 탐색 |
257
+ | `Enter / Space` | 옵션 선택 |
258
+ | `Esc` | 팝오버 닫기 |
259
+ | `문자 입력` | Typeahead 탐색 |
260
+
237
261
  **Examples:**
238
262
 
239
263
  _기본 선택:_
@@ -316,6 +340,14 @@ import {
316
340
  | `children` | `ReactNode` | | "결과가 없습니다." | 빈 상태 메시지 |
317
341
  | `className` | `string` | | | 기본 스타일 오버라이드 |
318
342
 
343
+ **Keyboard Shortcuts:**
344
+
345
+ | Keys | Action |
346
+ | ------- | ----------- |
347
+ | `↑ ↓` | 항목 탐색 |
348
+ | `Enter` | 항목 선택 |
349
+ | `Esc` | 팝오버 닫기 |
350
+
319
351
  ### DateRangePicker
320
352
 
321
353
  > 날짜 범위 선택 컴포넌트. 프리셋, 달력 UI, 포커스 관리와 RTL 방향 탐색 아이콘을 지원합니다.
@@ -356,6 +388,17 @@ import {
356
388
  | `delimiters` | `(string \| RegExp)[]` | | [",", ";", "\n"] | 붙여넣기 시 태그를 분할할 구분자 목록 |
357
389
  | `allowDuplicates` | `boolean` | | false | 중복 태그 허용 여부 |
358
390
 
391
+ **Keyboard Shortcuts:**
392
+
393
+ | Keys | Action |
394
+ | -------------- | ---------------------------------------- |
395
+ | `Enter` | 태그 추가 |
396
+ | `Backspace` | 마지막 태그 삭제 (입력 비어있을 때) |
397
+ | `←/→` | 태그 간 이동 (Composite roving tabindex) |
398
+ | `Delete` | 포커스된 태그 삭제 |
399
+ | `Ctrl+Z` | 실행취소 |
400
+ | `Ctrl+Shift+Z` | 다시실행 |
401
+
359
402
  ### ColorPicker
360
403
 
361
404
  > 색상 선택 컴포넌트. 프리셋 팔레트와 hex 입력을 지원합니다.
@@ -702,9 +745,11 @@ const store = useFormStore({
702
745
 
703
746
  **Import:** `import { Kbd } from "@reopt-ai/opt-ui"`
704
747
 
705
- | Prop | Type | Required | Default | Description |
706
- | ---------- | ----------- | -------- | ------- | -------------------- |
707
- | `children` | `ReactNode` | Yes | | 표시할 단축키 텍스트 |
748
+ | Prop | Type | Required | Default | Description |
749
+ | ----------- | ----------- | -------- | ------- | ------------------------------------------------------------------------------- |
750
+ | `children` | `ReactNode` | Yes | | 표시할 단축키 텍스트 |
751
+ | `hint` | `boolean` | | | 인라인 힌트 배지로 표시. `data-shortcut-hints="hidden"`일 때 숨겨진다 (app.css) |
752
+ | `className` | `string` | | | 기본 스타일 오버라이드 |
708
753
 
709
754
  ### Button
710
755
 
@@ -1092,6 +1137,15 @@ import {
1092
1137
  | ----------- | -------- | -------- | ------- | ---------------------- |
1093
1138
  | `className` | `string` | | | 기본 스타일 오버라이드 |
1094
1139
 
1140
+ **Keyboard Shortcuts:**
1141
+
1142
+ | Keys | Action |
1143
+ | --------------- | -------------- |
1144
+ | `← →` | 메뉴 간 탐색 |
1145
+ | `↑ ↓` | 메뉴 항목 탐색 |
1146
+ | `Enter / Space` | 항목 선택/토글 |
1147
+ | `Esc` | 메뉴 닫기 |
1148
+
1095
1149
  ### DropdownMenu
1096
1150
 
1097
1151
  > Menu Core 위의 간편 래퍼. 단일 트리거 드롭다운 메뉴에 특화되었습니다.
@@ -1112,6 +1166,14 @@ import {
1112
1166
  | `onClick` | `() => void` | | | 항목 클릭 핸들러 |
1113
1167
  | `disabled` | `boolean` | | | 비활성 상태 |
1114
1168
 
1169
+ **Keyboard Shortcuts:**
1170
+
1171
+ | Keys | Action |
1172
+ | --------------- | -------------- |
1173
+ | `↑ ↓` | 메뉴 항목 탐색 |
1174
+ | `Enter / Space` | 항목 선택 |
1175
+ | `Esc` | 메뉴 닫기 |
1176
+
1115
1177
  ### Popover
1116
1178
 
1117
1179
  > Popover 프리미티브 래퍼. 트리거 요소에 연결된 플로팅 콘텐츠를 표시합니다.
@@ -1123,6 +1185,13 @@ import {
1123
1185
  | `gutter` | `number` | | 8 | 트리거와의 간격 (px) |
1124
1186
  | `className` | `string` | | | 커스텀 CSS 클래스 |
1125
1187
 
1188
+ **Keyboard Shortcuts:**
1189
+
1190
+ | Keys | Action |
1191
+ | --------------- | ------------- |
1192
+ | `Esc` | 팝오버 닫기 |
1193
+ | `Enter / Space` | 트리거 활성화 |
1194
+
1126
1195
  ### Tabs
1127
1196
 
1128
1197
  > 탭 패널 시스템. 4-part anatomy: Root, TabList, Tab, TabPanel.
@@ -1131,26 +1200,31 @@ import {
1131
1200
 
1132
1201
  **TabsRoot:**
1133
1202
 
1134
- | Prop | Type | Required | Default | Description |
1135
- | ------------------- | ------------------------------ | -------- | ------- | ------------------------- |
1136
- | `defaultSelectedId` | `string` | | | 초기 선택된ID |
1137
- | `selectedId` | `string \| null` | | | 제어 모드: 선택된 탭 ID |
1138
- | `setSelectedId` | `(id: string \| null) => void` | | | 제어 모드: 탭 변경 핸들러 |
1203
+ | Prop | Type | Required | Default | Description |
1204
+ | ------------------- | ------------------------------ | -------- | ------- | -------------------------------------------------------------------------------------- |
1205
+ | `variant` | `"underline" \| "workspace"` | | | 프레임 형태. workspace는 편집기 (문서/쿼리처럼 열고 닫히며 상태를 갖는 작업 단위) |
1206
+ | `defaultSelectedId` | `string` | | | 초기 선택된 탭 ID |
1207
+ | `selectedId` | `string \| null` | | | 제어 모드: 선택된 ID |
1208
+ | `setSelectedId` | `(id: string \| null) => void` | | | 제어 모드: 탭 변경 핸들러 |
1139
1209
 
1140
1210
  **TabList:**
1141
1211
 
1142
- | Prop | Type | Required | Default | Description |
1143
- | ----------- | ----------- | -------- | ------- | ---------------------- |
1144
- | `children` | `ReactNode` | Yes | | Tab 요소들 |
1145
- | `className` | `string` | | | 기본 스타일 오버라이드 |
1212
+ | Prop | Type | Required | Default | Description |
1213
+ | ----------- | ----------- | -------- | ------- | -------------------------------------------------------------------------------------- |
1214
+ | `children` | `ReactNode` | Yes | | Tab 요소들 |
1215
+ | `actions` | `ReactNode` | | | 오른쪽 액션 영역 (새 탭, 닫기 등). tablist 바깥에 렌더돼 탭 순회에 끼어들지 않음 |
1216
+ | `className` | `string` | | | 기본 스타일 오버라이드 |
1146
1217
 
1147
1218
  **Tab:**
1148
1219
 
1149
- | Prop | Type | Required | Default | Description |
1150
- | ----------- | ----------- | -------- | ------- | ------------------------------------ |
1151
- | `id` | `string` | Yes | | 탭 고유 ID (TabPanel의 tabId와 매칭) |
1152
- | `children` | `ReactNode` | Yes | | 탭 레이블 |
1153
- | `className` | `string` | | | 기본 스타일 오버라이드 |
1220
+ | Prop | Type | Required | Default | Description |
1221
+ | ------------- | ---------------------- | -------- | ------- | ------------------------------------------------- |
1222
+ | `id` | `string` | Yes | | 탭 고유 ID (TabPanel의 tabId와 매칭) |
1223
+ | `children` | `ReactNode` | Yes | | 탭 레이블 |
1224
+ | `icon` | `ReactNode` | | | 이름 앞 아이콘. 활성 탭에서 accent 색으로 전환 |
1225
+ | `status` | `"dirty" \| "running"` | | | 저장되지 않은 변경 / 실행 중 인디케이터 |
1226
+ | `statusLabel` | `string` | | | status 인디케이터의 접근성 레이블 |
1227
+ | `className` | `string` | | | 기본 스타일 오버라이드 |
1154
1228
 
1155
1229
  **TabPanel:**
1156
1230
 
@@ -1160,6 +1234,14 @@ import {
1160
1234
  | `children` | `ReactNode` | Yes | | 패널 콘텐츠 |
1161
1235
  | `className` | `string` | | | 기본 스타일 오버라이드 |
1162
1236
 
1237
+ **Keyboard Shortcuts:**
1238
+
1239
+ | Keys | Action |
1240
+ | ------ | ------------------- |
1241
+ | `← →` | 탭 탐색 |
1242
+ | `Home` | 첫 번째 탭으로 이동 |
1243
+ | `End` | 마지막 탭으로 이동 |
1244
+
1163
1245
  ### Disclosure
1164
1246
 
1165
1247
  > 접기/펼치기 콘텐츠 영역. 3-part anatomy: Root, Trigger, Content.
@@ -1188,6 +1270,12 @@ import {
1188
1270
  | `children` | `ReactNode` | Yes | | 접히는 콘텐츠 |
1189
1271
  | `className` | `string` | | | 기본 스타일 오버라이드 |
1190
1272
 
1273
+ **Keyboard Shortcuts:**
1274
+
1275
+ | Keys | Action |
1276
+ | --------------- | -------------- |
1277
+ | `Enter / Space` | 열기/닫기 토글 |
1278
+
1191
1279
  ### Dialog
1192
1280
 
1193
1281
  > 모달 다이얼로그. 9-part anatomy: Root, Disclosure, Panel, Heading, Description, Dismiss, Header, Body, Footer.
@@ -1253,6 +1341,13 @@ import {
1253
1341
  | ---------- | ----------- | -------- | ------- | -------------- |
1254
1342
  | `children` | `ReactNode` | Yes | | 액션 버튼 영역 |
1255
1343
 
1344
+ **Keyboard Shortcuts:**
1345
+
1346
+ | Keys | Action |
1347
+ | ----- | -------------------------------- |
1348
+ | `Esc` | 다이얼로그 닫기 |
1349
+ | `Tab` | 다이얼로그 내 포커스 이동 (트랩) |
1350
+
1256
1351
  **Examples:**
1257
1352
 
1258
1353
  _모달 대화상자:_
@@ -1298,6 +1393,13 @@ import {
1298
1393
  | `swipeToDismiss` | `boolean` | | true | 가장자리 방향으로 드래그해 닫기 활성화 |
1299
1394
  | `swipeDismissThreshold` | `number` | | 80 | 닫힘 커밋에 필요한 드래그 거리(px) |
1300
1395
 
1396
+ **Keyboard Shortcuts:**
1397
+
1398
+ | Keys | Action |
1399
+ | ----- | ----------------------- |
1400
+ | `Esc` | 드로어 닫기 |
1401
+ | `Tab` | 드로어 내부 포커스 이동 |
1402
+
1301
1403
  ### Toolbar
1302
1404
 
1303
1405
  > 툴바 컨테이너 + 툴팁. 7 exports: ToolbarRoot, ToolbarContainer, ToolbarButton, ToolbarSeparator, TooltipProvider, TooltipAnchor, Tooltip.
@@ -1350,6 +1452,15 @@ import {
1350
1452
  | `children` | `ReactNode` | Yes | | 툴팁 내용 |
1351
1453
  | `className` | `string` | | | 기본 스타일 오버라이드 |
1352
1454
 
1455
+ **Keyboard Shortcuts:**
1456
+
1457
+ | Keys | Action |
1458
+ | --------------- | --------------------- |
1459
+ | `← →` | 버튼 간 탐색 |
1460
+ | `Enter / Space` | 버튼 활성화 |
1461
+ | `Home` | 첫 번째 버튼으로 이동 |
1462
+ | `End` | 마지막 버튼으로 이동 |
1463
+
1353
1464
  ### Pagination
1354
1465
 
1355
1466
  > 페이지 넘김 네비게이션. ellipsis 포함 페이지 번호, compact/count variant, totalPages/cursor pagination, Prev/Next 버튼을 제공합니다.
@@ -1397,6 +1508,15 @@ import {
1397
1508
  | `focusWrap` | `boolean` | | true | 행 끝에서 다음 행으로 이동 |
1398
1509
  | `className` | `string` | | | 컨테이너 CSS 클래스 |
1399
1510
 
1511
+ **Keyboard Shortcuts:**
1512
+
1513
+ | Keys | Action |
1514
+ | --------- | -------------------- |
1515
+ | `↑ ↓ ← →` | 2D 방향 탐색 |
1516
+ | `Home` | 첫 항목으로 이동 |
1517
+ | `End` | 마지막 항목으로 이동 |
1518
+ | `Tab` | 영역 밖으로 이동 |
1519
+
1400
1520
  ### PageHeader
1401
1521
 
1402
1522
  > 페이지 제목, 설명, 액션 슬롯을 제공하는 레이아웃 헤더 컴포넌트.
@@ -1456,30 +1576,37 @@ import {
1456
1576
 
1457
1577
  **ResizablePanelGroup:**
1458
1578
 
1459
- | Prop | Type | Required | Default | Description |
1460
- | ------------ | ---------------------------- | -------- | ------- | ---------------------------------------- |
1461
- | `direction` | `"horizontal" \| "vertical"` | Yes | | 패널 분할 방향 |
1462
- | `children` | `ReactNode` | Yes | | ResizablePanel + ResizableHandle 조합 |
1463
- | `autoSaveId` | `string` | | | 로컬 스토리지에 크기 상태 저장 (고유 ID) |
1464
- | `className` | `string` | | | 커스텀 CSS 클래스 |
1579
+ | Prop | Type | Required | Default | Description |
1580
+ | ----------------- | ------------------------------------------ | -------- | ------- | --------------------------------------------------- |
1581
+ | `direction` | `"horizontal" \| "vertical"` | Yes | | 패널 분할 방향 |
1582
+ | `children` | `ReactNode` | Yes | | ResizablePanel + ResizableHandle 조합 |
1583
+ | `id` | `string` | | | 그룹과 defaultLayout의 패널 크기를 식별하는 고유 ID |
1584
+ | `defaultLayout` | `Record<string, number>` | | | 패널 ID별 초기 비율(0-100) |
1585
+ | `onLayoutChanged` | `(layout: Record<string, number>) => void` | | | 드래그가 끝난 뒤 확정된 레이아웃 콜백 |
1586
+ | `groupRef` | `Ref<ResizablePanelGroupHandle>` | | | 레이아웃 조회·설정을 위한 명령형 그룹 ref |
1587
+ | `autoSaveId` | `string` | | | id의 deprecated 별칭 |
1588
+ | `className` | `string` | | | 커스텀 CSS 클래스 |
1465
1589
 
1466
1590
  **ResizablePanel:**
1467
1591
 
1468
- | Prop | Type | Required | Default | Description |
1469
- | ------------- | ----------- | -------- | ------- | ----------------------------- |
1470
- | `defaultSize` | `number` | | | 초기 크기 (퍼센트, 0-100) |
1471
- | `minSize` | `number` | | | 최소 크기 (퍼센트) |
1472
- | `maxSize` | `number` | | | 최대 크기 (퍼센트) |
1473
- | `collapsible` | `boolean` | | false | 최소 크기 이하 시 접히기 허용 |
1474
- | `children` | `ReactNode` | Yes | | 패널 콘텐츠 |
1475
- | `className` | `string` | | | 커스텀 CSS 클래스 |
1592
+ | Prop | Type | Required | Default | Description |
1593
+ | ------------- | ------------------------------------------------------------------------------------------ | -------- | ------- | -------------------------------------------------- |
1594
+ | `defaultSize` | `number \| string` | | | 초기 크기. 숫자는 퍼센트, 문자열은 명시한 CSS 단위 |
1595
+ | `minSize` | `number \| string` | | | 최소 크기. 숫자는 퍼센트 |
1596
+ | `maxSize` | `number \| string` | | | 최대 크기. 숫자는 퍼센트 |
1597
+ | `collapsible` | `boolean` | | false | 최소 크기 이하 시 접히기 허용 |
1598
+ | `onResize` | `(size: ResizablePanelSize, id?: string \| number, previous?: ResizablePanelSize) => void` | | | 패널 크기 변경 콜백 |
1599
+ | `panelRef` | `Ref<ResizablePanelHandle>` | | | 접기·펼치기·크기 제어를 위한 명령형 패널 ref |
1600
+ | `children` | `ReactNode` | Yes | | 패널 콘텐츠 |
1601
+ | `className` | `string` | | | 커스텀 CSS 클래스 |
1476
1602
 
1477
1603
  **ResizableHandle:**
1478
1604
 
1479
- | Prop | Type | Required | Default | Description |
1480
- | ------------ | --------- | -------- | ------- | ----------------------- |
1481
- | `withHandle` | `boolean` | | false | 시각적 드래그 핸들 표시 |
1482
- | `className` | `string` | | | 커스텀 CSS 클래스 |
1605
+ | Prop | Type | Required | Default | Description |
1606
+ | ------------ | --------- | -------- | ------- | ---------------------------------- |
1607
+ | `withHandle` | `boolean` | | false | 시각적 드래그 핸들 표시 |
1608
+ | `disabled` | `boolean` | | | 드래그 키보드 리사이즈 비활성화 |
1609
+ | `className` | `string` | | | 커스텀 CSS 클래스 |
1483
1610
 
1484
1611
  ### VirtualList
1485
1612
 
@@ -1544,7 +1671,7 @@ import {
1544
1671
  | Toggle | 눌림(pressed) 두 상태 버튼. 단독 사용하거나 ToggleGroup으로 묶어 단일/다중 선택을 만든다. | `Toggle`, `ToggleGroup` |
1545
1672
  | Accordion | 수직으로 쌓인 펼침/접힘 패널. single(한 개)/multiple(여러 개) 모드와 collapsible 지원. | `AccordionRoot`, `AccordionItem`, `AccordionTrigger`, `AccordionContent` |
1546
1673
  | Meter | 범위 내 스칼라 측정값 게이지 (디스크 사용량·점수·용량 등). role=meter로 작업 진행률(Progress)과 구분된다. | `Meter` |
1547
- | BlockLayout | Block 루트 레이아웃. flex + 기본 section spacing 적용, loading prop으로 LoadingOverlay 자동 래핑. | `BlockLayout` |
1674
+ | BlockLayout | Block 루트 레이아웃. 자식 section spacing 선택적 시맨틱 inset을 제공하고 loading prop으로 LoadingOverlay 자동 래핑합니다. | `BlockLayout` |
1548
1675
  | createBlock | Block 팩토리 함수. BlockLayout 래핑을 구조적으로 강제하여 loading/className 처리를 자동화합니다. | `createBlock` |
1549
1676
  | StarRating | 1~N점 별점을 선택하는 인터랙티브 레이팅 입력. 읽기 전용 표시도 지원. | `StarRating` |
1550
1677
  | ErrorBoundary | React 에러 바운더리. 자식 컴포넌트 렌더 에러를 잡아 fallback UI를 표시합니다. | `ErrorBoundary` |
@@ -1698,17 +1825,18 @@ import {
1698
1825
 
1699
1826
  ### BlockLayout
1700
1827
 
1701
- > Block 루트 레이아웃. flex + 기본 section spacing 적용, loading prop으로 LoadingOverlay 자동 래핑.
1828
+ > Block 루트 레이아웃. 자식 section spacing 선택적 시맨틱 inset을 제공하고 loading prop으로 LoadingOverlay 자동 래핑합니다.
1702
1829
 
1703
1830
  **Import:** `import { BlockLayout } from "@reopt-ai/opt-ui"`
1704
1831
 
1705
- | Prop | Type | Required | Default | Description |
1706
- | -------------- | --------------------------------------------- | -------- | --------- | ------------------------------------------------------------------------------------ |
1707
- | `children` | `ReactNode` | Yes | | Block 콘텐츠 |
1708
- | `loading` | `boolean` | | | 로딩 상태. 설정 시 LoadingOverlay로 자동 래핑 |
1709
- | `loadingLabel` | `string` | | | LoadingOverlay 접근성 레이블 |
1710
- | `spacing` | `"section" \| "group" \| "element" \| "none"` | | "section" | Block 최상위 자식 사이 간격. 데이터 밀도가 높은 Block는 group/element로 낮출 수 있음 |
1711
- | `className` | `string` | | | 기본 스타일 오버라이드 |
1832
+ | Prop | Type | Required | Default | Description |
1833
+ | -------------- | --------------------------------------------- | -------- | --------- | ---------------------------------------------------------------------------------------------------- |
1834
+ | `children` | `ReactNode` | Yes | | Block 콘텐츠 |
1835
+ | `loading` | `boolean` | | | 로딩 상태. 설정 시 LoadingOverlay로 자동 래핑 |
1836
+ | `loadingLabel` | `string` | | | LoadingOverlay 접근성 레이블 |
1837
+ | `spacing` | `"section" \| "group" \| "element" \| "none"` | | "section" | Block 최상위 자식 사이 간격. 데이터 밀도가 높은 Block는 group/element로 낮출 수 있음 |
1838
+ | `inset` | `"section" \| "group" \| "element" \| "none"` | | | Block 안쪽 여백. 페이지 콘텐츠 경계에는 section을 사용하고, 이미 여백을 제공하는 Shell 안에서는 생략 |
1839
+ | `className` | `string` | | | 기본 스타일 오버라이드 |
1712
1840
 
1713
1841
  **Examples:**
1714
1842
 
@@ -1717,7 +1845,7 @@ _Block 루트:_
1717
1845
  ```tsx
1718
1846
  import { BlockLayout, PageHeader } from "@reopt-ai/opt-ui";
1719
1847
 
1720
- <BlockLayout loading={isLoading} spacing="section">
1848
+ <BlockLayout loading={isLoading} spacing="section" inset="section">
1721
1849
  <PageHeader title="대시보드" description="프로젝트 현황" />
1722
1850
  <section>콘텐츠 영역</section>
1723
1851
  </BlockLayout>;
@@ -1775,6 +1903,15 @@ const MyDashboard = createBlock<MyDashboardProps>(
1775
1903
  | `readOnly` | `boolean` | | false | 읽기 전용 모드 |
1776
1904
  | `size` | `"sm" \| "md" \| "lg"` | | "md" | 별 아이콘 크기 |
1777
1905
 
1906
+ **Keyboard Shortcuts:**
1907
+
1908
+ | Keys | Action |
1909
+ | ----------------------- | ---------------- |
1910
+ | `ArrowRight / ArrowUp` | 별점 1 증가 |
1911
+ | `ArrowLeft / ArrowDown` | 별점 1 감소 |
1912
+ | `Home` | 별점 1로 설정 |
1913
+ | `End` | 별점 최대로 설정 |
1914
+
1778
1915
  ### ErrorBoundary
1779
1916
 
1780
1917
  > React 에러 바운더리. 자식 컴포넌트 렌더 에러를 잡아 fallback UI를 표시합니다.
@@ -1821,6 +1958,15 @@ const MyDashboard = createBlock<MyDashboardProps>(
1821
1958
  | `keywords` | `string[]` | | | value에 더해 검색어와 비교할 추가 키워드 |
1822
1959
  | `onSelect` | `(value: string) => void` | | | Enter/클릭 시 호출 |
1823
1960
 
1961
+ **Keyboard Shortcuts:**
1962
+
1963
+ | Keys | Action |
1964
+ | ------------ | ---------------- |
1965
+ | `↑ ↓` | 활성 항목 이동 |
1966
+ | `Home / End` | 처음/마지막 항목 |
1967
+ | `Enter` | 활성 항목 선택 |
1968
+ | `Esc` | dialog 닫기 |
1969
+
1824
1970
  ### ShaderSurface
1825
1971
 
1826
1972
  > ogl 기반 애니메이션 WebGL 셰이더 배경. 럭셔리 프리셋(메탈릭/실크/유리 등) + 색·파라미터로 배경·카드 배경을 만든다. 정지 프레임·PNG 캡처·WebGL 폴백 지원.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Visual Components"
3
3
  description: "0 Visual layer components — props, examples, keyboard shortcuts."
4
- version: "1.4.1"
4
+ version: "1.6.0"
5
5
  generated: true
6
6
  ---
7
7