@reopt-ai/opt-ui 1.5.0 → 1.7.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 (99) hide show
  1. package/COMPONENT_CATALOG.md +178 -50
  2. package/README.md +28 -7
  3. package/dist/app.css +170 -0
  4. package/dist/core/index.cjs +164 -324
  5. package/dist/core/index.d.cts +3 -6
  6. package/dist/core/index.d.ts +3 -6
  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 +36 -28
  10. package/dist/docs/02-components/02-visuals.md +1 -1
  11. package/dist/docs/02-components/03-shells.md +144 -23
  12. package/dist/docs/02-components/04-surfaces.md +1 -1
  13. package/dist/docs/02-components/index.md +4 -4
  14. package/dist/docs/03-recipes/03-layouts.md +16 -12
  15. package/dist/docs/05-migration/01-breaking-changes.md +46 -1
  16. package/dist/field-sidebar-BTZCBviA.d.cts +1031 -0
  17. package/dist/field-sidebar-BTZCBviA.d.cts.map +1 -0
  18. package/dist/field-sidebar-CB8vjvUM.d.ts +1031 -0
  19. package/dist/field-sidebar-CB8vjvUM.d.ts.map +1 -0
  20. package/dist/field-sidebar-Cs-J-5VE.js +4233 -0
  21. package/dist/field-sidebar-Cs-J-5VE.js.map +1 -0
  22. package/dist/field-sidebar-CzIQX70-.cjs +4561 -0
  23. package/dist/id-registry.cjs +1939 -1872
  24. package/dist/id-registry.d.cts +14 -11
  25. package/dist/id-registry.d.cts.map +1 -0
  26. package/dist/id-registry.d.ts +14 -11
  27. package/dist/id-registry.d.ts.map +1 -0
  28. package/dist/id-registry.js +1937 -1871
  29. package/dist/id-registry.js.map +1 -0
  30. package/dist/id-registry.json +113 -28
  31. package/dist/index.cjs +8380 -9790
  32. package/dist/index.d.cts +1555 -1442
  33. package/dist/index.d.cts.map +1 -0
  34. package/dist/index.d.ts +1555 -1442
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +7996 -9778
  37. package/dist/index.js.map +1 -0
  38. package/dist/meta.cjs +7753 -6875
  39. package/dist/meta.d.cts.map +1 -0
  40. package/dist/meta.d.ts.map +1 -0
  41. package/dist/meta.js +7752 -6846
  42. package/dist/meta.js.map +1 -0
  43. package/dist/pagination-DWbvACuN.js +3850 -0
  44. package/dist/pagination-DWbvACuN.js.map +1 -0
  45. package/dist/pagination-DjfxBcjX.cjs +4739 -0
  46. package/dist/query.cjs +386 -0
  47. package/dist/query.d.cts +141 -0
  48. package/dist/query.d.cts.map +1 -0
  49. package/dist/query.d.ts +141 -0
  50. package/dist/query.d.ts.map +1 -0
  51. package/dist/query.js +371 -0
  52. package/dist/query.js.map +1 -0
  53. package/dist/shader-surface-BUPZ0P-n.js +3654 -0
  54. package/dist/shader-surface-BUPZ0P-n.js.map +1 -0
  55. package/dist/shader-surface-BfTP9c1Q.d.ts +1788 -0
  56. package/dist/shader-surface-BfTP9c1Q.d.ts.map +1 -0
  57. package/dist/shader-surface-DRrcLrWf.d.cts +1788 -0
  58. package/dist/shader-surface-DRrcLrWf.d.cts.map +1 -0
  59. package/dist/shader-surface-Fav5K9UC.cjs +4041 -0
  60. package/dist/shells/index.cjs +58 -65
  61. package/dist/shells/index.d.cts +4 -5
  62. package/dist/shells/index.d.ts +4 -5
  63. package/dist/shells/index.js +4 -64
  64. package/dist/tailwind.css +49 -0
  65. package/dist/theme/presets/default.css +2 -2
  66. package/dist/theme/presets/minimal.css +2 -2
  67. package/dist/theme/presets/mono-dark.css +2 -2
  68. package/dist/theme/presets/natural.css +1 -1
  69. package/dist/theme/presets/pro.css +2 -2
  70. package/dist/theme/server.cjs +257 -228
  71. package/dist/theme/server.d.cts +48 -60
  72. package/dist/theme/server.d.cts.map +1 -0
  73. package/dist/theme/server.d.ts +48 -60
  74. package/dist/theme/server.d.ts.map +1 -0
  75. package/dist/theme/server.js +234 -189
  76. package/dist/theme/server.js.map +1 -0
  77. package/dist/types-D0FlcYnM.d.cts +301 -0
  78. package/dist/types-D0FlcYnM.d.cts.map +1 -0
  79. package/dist/types-D0FlcYnM.d.ts +301 -0
  80. package/dist/types-D0FlcYnM.d.ts.map +1 -0
  81. package/dist/visuals/index.cjs +10 -4
  82. package/dist/visuals/index.d.cts +2 -1
  83. package/dist/visuals/index.d.ts +2 -1
  84. package/dist/visuals/index.js +1 -2
  85. package/package.json +27 -11
  86. package/dist/chunk-3GWWZKX7.js +0 -38
  87. package/dist/chunk-3QFYBBL6.cjs +0 -4759
  88. package/dist/chunk-3XD4HIFL.js +0 -3241
  89. package/dist/chunk-AFF2HPE5.cjs +0 -5008
  90. package/dist/chunk-NXZJIHEZ.cjs +0 -3241
  91. package/dist/chunk-ONE3C5RV.cjs +0 -38
  92. package/dist/chunk-RBM2RNC2.js +0 -5008
  93. package/dist/chunk-VBGPEW45.js +0 -4759
  94. package/dist/index-BZ_lBlO1.d.ts +0 -474
  95. package/dist/index-BuvxoWHf.d.cts +0 -474
  96. package/dist/index-DWyqDIkH.d.cts +0 -1689
  97. package/dist/index-Uyijm14M.d.ts +0 -1689
  98. package/dist/types-D4-0lwaE.d.cts +0 -298
  99. package/dist/types-D4-0lwaE.d.ts +0 -298
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  title: "Shell Components"
3
- description: "75 Shell layer components — props, examples, keyboard shortcuts."
4
- version: "1.4.1"
3
+ description: "80 Shell layer components — props, examples, keyboard shortcuts."
4
+ version: "1.6.0"
5
5
  generated: true
6
6
  ---
7
7
 
8
- # Shell Components (75)
8
+ # Shell Components (80)
9
9
 
10
10
  ## Navigation & Layout
11
11
 
@@ -483,6 +483,15 @@ import { DataTable } from "@reopt-ai/opt-ui";
483
483
 
484
484
  **Import:** `import { ConnectionIndicator } from "@reopt-ai/opt-ui"`
485
485
 
486
+ | Prop | Type | Required | Default | Description |
487
+ | ----------- | ----------------------------------------------------------- | -------- | ------- | --------------------------------------------------------------------- |
488
+ | `status` | `"connected" \| "connecting" \| "disconnected" \| "error"` | | | 연결 상태 프리셋. tone과 pulse의 기본값을 정함 |
489
+ | `tone` | `"neutral" \| "success" \| "warning" \| "danger" \| "info"` | | | status로 표현되지 않는 도메인 상태의 색을 직접 지정 (status보다 우선) |
490
+ | `label` | `string` | | | 상태 문구 |
491
+ | `showLabel` | `boolean` | | | 문구 표시 여부 |
492
+ | `pulse` | `boolean` | | | 점 애니메이션. 생략하면 status 프리셋을 따름 |
493
+ | `className` | `string` | | | 기본 스타일 오버라이드 |
494
+
486
495
  ### EventIcon
487
496
 
488
497
  > 이벤트 아이콘. semantic key 또는 ReactNode 아이콘과 배경색을 표시합니다.
@@ -944,17 +953,17 @@ const fields = [
944
953
  **Import:** `import { FileUploadForm } from "@reopt-ai/opt-ui"`
945
954
  **Dependencies:** form (core)
946
955
 
947
- | Prop | Type | Required | Default | Description |
948
- | ----------------- | ------------------------------------------------ | -------- | -------------------------- | ----------------------------------------- |
949
- | `accept` | `string` | | "image/\*,.pdf,.doc,.docx" | 허용 파일 타입 |
950
- | `showPreview` | `boolean` | | true | 이미지 미리보기 표시 |
951
- | `showFileInfo` | `boolean` | | true | 파일 정보 표시 |
952
- | `showDescription` | `boolean` | | true | 설명 텍스트영역 표시 |
953
- | `maxFileSize` | `number` | | | 최대 파일 크기 (bytes) |
954
- | `onSubmit` | `(values: { title, description, file }) => void` | | | 제출 핸들러 |
955
- | `labels` | `FileUploadFormLabels` | | | i18n용 라벨 오버라이드 |
956
- | `onPreview` | `(file: File) => void` | | | 파일 선택 후 프리뷰 콜백 |
957
- | `columnMapping` | `ReactNode` | | | CSV 컬럼 매핑 UI 슬롯 (파일 선택 후 표시) |
956
+ | Prop | Type | Required | Default | Description |
957
+ | ----------------- | ------------------------------------------------ | -------- | ------------------------- | ----------------------------------------- |
958
+ | `accept` | `string` | | "image/*,.pdf,.doc,.docx" | 허용 파일 타입 |
959
+ | `showPreview` | `boolean` | | true | 이미지 미리보기 표시 |
960
+ | `showFileInfo` | `boolean` | | true | 파일 정보 표시 |
961
+ | `showDescription` | `boolean` | | true | 설명 텍스트영역 표시 |
962
+ | `maxFileSize` | `number` | | | 최대 파일 크기 (bytes) |
963
+ | `onSubmit` | `(values: { title, description, file }) => void` | | | 제출 핸들러 |
964
+ | `labels` | `FileUploadFormLabels` | | | i18n용 라벨 오버라이드 |
965
+ | `onPreview` | `(file: File) => void` | | | 파일 선택 후 프리뷰 콜백 |
966
+ | `columnMapping` | `ReactNode` | | | CSV 컬럼 매핑 UI 슬롯 (파일 선택 후 표시) |
958
967
 
959
968
  ### WizardForm
960
969
 
@@ -1099,6 +1108,25 @@ const fields = [
1099
1108
  **Import:** `import { SqlEditor } from "@reopt-ai/opt-ui"`
1100
1109
  **Dependencies:** button (core)
1101
1110
 
1111
+ | Prop | Type | Required | Default | Description |
1112
+ | ------------------- | ----------------------------- | -------- | ------- | -------------------------------------------------------------------------------- |
1113
+ | `value` | `string` | Yes | | 편집 중인 SQL |
1114
+ | `onChange` | `(sql: string) => void` | Yes | | 본문 변경 핸들러 |
1115
+ | `onRun` | `(sql: string) => void` | | | Mod+Enter 실행 핸들러 |
1116
+ | `onRunAndAdvance` | `(sql: string) => void` | | | Shift+Enter — 실행 후 다음 셀/탭으로 이동 |
1117
+ | `schema` | `SqlEditorSchema` | | | 테이블/컬럼 자동완성 스키마. 변경 시 에디터를 다시 만들지 않고 자동완성만 재구성 |
1118
+ | `completionSources` | `SqlEditorCompletionSource[]` | | | 스키마 자동완성에 더할 완성 소스 (함수 시그니처, 스니펫) |
1119
+ | `keymap` | `SqlEditorKeyBinding[]` | | | 추가 키 바인딩. 내장 실행 바인딩보다 먼저 평가 |
1120
+ | `extensions` | `SqlEditorExtension[]` | | | 임의의 CodeMirror 확장. 내장 확장 뒤에 붙어 우선권을 가짐 |
1121
+ | `height` | `number \| "fill"` | | | px 고정 높이. fill이면 부모가 정한 높이를 채움 |
1122
+ | `placeholder` | `string` | | | 빈 편집기 안내 문구 |
1123
+ | `readOnly` | `boolean` | | | 편집 잠금 |
1124
+ | `ariaLabel` | `string` | | | 편집 영역 접근성 레이블 |
1125
+ | `autoFocus` | `boolean` | | | 마운트 시 포커스 |
1126
+ | `showFooter` | `boolean` | | | 실행 힌트/버튼 표시. 기본값은 onRun이 있을 때 표시 |
1127
+ | `labels` | `SqlEditorLabels` | | | 문구 오버라이드 |
1128
+ | `className` | `string` | | | 기본 스타일 오버라이드 |
1129
+
1102
1130
  ### EventMetaEditor
1103
1131
 
1104
1132
  > 이벤트 메타 에디터. 레이블이 연결된 IconPicker + ColorPicker + TagInput 조합으로 이벤트 메타데이터를 편집합니다.
@@ -1295,15 +1323,20 @@ const fields = [
1295
1323
 
1296
1324
  ## Other
1297
1325
 
1298
- | Component | Description | Key Exports |
1299
- | --------------- | -------------------------------------------------------------------------- | ----------------- |
1300
- | PageAside | Sticky 페이지 사이드 aside chrome. 고정 너비 + header/body/footer 3-slot. | `PageAside` |
1301
- | FailureList | 실패 목록 패널. severity별 색상 강조, 그룹핑, 액션 슬롯을 지원합니다. | `FailureList` |
1302
- | KeyValueEditor | 키-값 쌍 편집기. 동적 행 추가/삭제, 비밀값 토글, 유효성 검사를 지원합니다. | `KeyValueEditor` |
1303
- | AuditTimeline | 변경 이력 타임라인. 액션별 색상 코딩 + 확장 가능한 diff 뷰. | `AuditTimeline` |
1304
- | ChatSidebar | AI 채팅 사이드바. 대화 목록, 검색, 새 대화 버튼. | `ChatSidebar` |
1305
- | ChatInput | 채팅 입력 컴포넌트. 자동 리사이즈 textarea, 파일 첨부, 모델/스타일 Select. | `ChatInput` |
1306
- | ChatMessageList | 채팅 메시지 목록. 역할별 말풍선, 타이핑 인디케이터, 자동 스크롤. | `ChatMessageList` |
1326
+ | Component | Description | Key Exports |
1327
+ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
1328
+ | PageAside | Sticky 페이지 사이드 aside chrome. 고정 너비 + header/body/footer 3-slot. | `PageAside` |
1329
+ | FailureList | 실패 목록 패널. severity별 색상 강조, 그룹핑, 액션 슬롯을 지원합니다. | `FailureList` |
1330
+ | KeyValueEditor | 키-값 쌍 편집기. 동적 행 추가/삭제, 비밀값 토글, 유효성 검사를 지원합니다. | `KeyValueEditor` |
1331
+ | AuditTimeline | 변경 이력 타임라인. 액션별 색상 코딩 + 확장 가능한 diff 뷰. | `AuditTimeline` |
1332
+ | ChatSidebar | AI 채팅 사이드바. 대화 목록, 검색, 새 대화 버튼. | `ChatSidebar` |
1333
+ | ChatInput | 채팅 입력 컴포넌트. 자동 리사이즈 textarea, 파일 첨부, 모델/스타일 Select. | `ChatInput` |
1334
+ | ChatMessageList | 채팅 메시지 목록. 역할별 말풍선, 타이핑 인디케이터, 자동 스크롤. | `ChatMessageList` |
1335
+ | TimeRangeControl | date math(now-7d, now/d) 기반 시간 범위 컨트롤. quick select, 프리셋/최근 사용, 명시적 Update, 자동 갱신, 창 이동·확대/축소 버튼을 제공합니다. | `TimeRangeControl`, `DEFAULT_TIME_PRESETS` |
1336
+ | TimeSeriesPanel | 시간 범위 컨트롤과 시계열 차트를 한 단위로 묶은 패널. 드래그 줌과 줌 히스토리(되돌리기), 범례 토글을 포함합니다. | `TimeSeriesPanel` |
1337
+ | LogTable | 계속 도착하는 로그용 윈도잉 테이블. 컬럼 정의 기반, 상단 삽입 시 스크롤 위치 보존, follow 상태 보고, 셀 값 즉시 필터, 밀도·정렬을 지원합니다. | `LogTable` |
1338
+ | QueryBar | 검색과 필터를 한 입력으로 합친 쿼리 바. field:value, -부정, (a or b), 비교 연산, 필드·값 자동완성, 절(clause) 칩을 지원합니다. | `QueryBar` |
1339
+ | FieldSidebar | 데이터에 어떤 필드가 있고 각 필드가 무슨 값을 갖는지 보여주는 사이드바. 값 분포 막대, 컬럼으로 승격, 값 기준 포함/제외 필터를 제공합니다. | `FieldSidebar` |
1307
1340
 
1308
1341
  ### PageAside
1309
1342
 
@@ -1466,3 +1499,91 @@ const messages = [
1466
1499
 
1467
1500
  <ChatMessageList messages={messages} loading={false} />;
1468
1501
  ```
1502
+
1503
+ ### TimeRangeControl
1504
+
1505
+ > date math(now-7d, now/d) 기반 시간 범위 컨트롤. quick select, 프리셋/최근 사용, 명시적 Update, 자동 갱신, 창 이동·확대/축소 버튼을 제공합니다.
1506
+
1507
+ **Import:** `import { TimeRangeControl } from "@reopt-ai/opt-ui"`
1508
+
1509
+ | Prop | Type | Required | Default | Description |
1510
+ | ------------------- | -------------------------------- | -------- | ------- | ---------------------------------------- |
1511
+ | `value` | `TimeRange` | Yes | | { from, to } — date math 문자열 또는 ISO |
1512
+ | `onChange` | `(range: TimeRange) => void` | Yes | | 범위가 커밋되었을 때 호출 |
1513
+ | `presets` | `TimeRangePreset[]` | | | 자주 쓰는 범위 목록 |
1514
+ | `recentRanges` | `TimeRangePreset[]` | | | 최근 사용한 범위 (호출자 소유) |
1515
+ | `timeZone` | `string` | | | 라운딩·표시에 쓸 IANA 타임존 |
1516
+ | `showUpdateButton` | `boolean` | | true | 편집을 명시적으로 커밋 |
1517
+ | `showWindowButtons` | `boolean` | | true | 이전/다음 창, 확대/축소 버튼 |
1518
+ | `refresh` | `RefreshSetting` | | | { interval, paused } 자동 갱신 설정 |
1519
+ | `onRefresh` | `() => void \| Promise<unknown>` | | | 갱신 요청 — 프라미스가 끝난 뒤 다음 tick |
1520
+
1521
+ ### TimeSeriesPanel
1522
+
1523
+ > 시간 범위 컨트롤과 시계열 차트를 한 단위로 묶은 패널. 드래그 줌과 줌 히스토리(되돌리기), 범례 토글을 포함합니다.
1524
+
1525
+ **Import:** `import { TimeSeriesPanel } from "@reopt-ai/opt-ui"`
1526
+
1527
+ | Prop | Type | Required | Default | Description |
1528
+ | ------------------ | ---------------------------- | -------- | ------- | --------------------------------------------- |
1529
+ | `data` | `TimeSeriesPoint[]` | Yes | | 시계열 데이터 |
1530
+ | `series` | `TimeSeriesDef[]` | Yes | | 시리즈 정의 |
1531
+ | `range` | `TimeRange` | Yes | | 조회 구간 — 차트 축도 여기에 고정됩니다 |
1532
+ | `onRangeChange` | `(range: TimeRange) => void` | Yes | | 드래그 줌·컨트롤 변경으로 구간이 바뀔 때 호출 |
1533
+ | `showRangeControl` | `boolean` | | true | 헤더에 TimeRangeControl 렌더 |
1534
+ | `toggleableLegend` | `boolean` | | false | 범례 클릭으로 시리즈 숨김 |
1535
+ | `annotations` | `TimeSeriesAnnotation[]` | | | 시간축 마커/구간 |
1536
+ | `height` | `number` | | 280 | 차트 높이 |
1537
+
1538
+ ### LogTable
1539
+
1540
+ > 계속 도착하는 로그용 윈도잉 테이블. 컬럼 정의 기반, 상단 삽입 시 스크롤 위치 보존, follow 상태 보고, 셀 값 즉시 필터, 밀도·정렬을 지원합니다.
1541
+
1542
+ **Import:** `import { LogTable } from "@reopt-ai/opt-ui"`
1543
+
1544
+ | Prop | Type | Required | Default | Description |
1545
+ | ---------------- | ---------------------------------------- | -------- | -------- | -------------------------------- |
1546
+ | `rows` | `Row[]` | Yes | | 표시할 행 |
1547
+ | `columns` | `LogColumn<Row>[]` | Yes | | 컬럼 정의 (표시 중인 것만) |
1548
+ | `getRowId` | `(row: Row) => string` | Yes | | 행 식별자 |
1549
+ | `selectedId` | `string \| null` | | | 선택된 행 |
1550
+ | `onSelect` | `(id: string) => void` | | | 행 선택 |
1551
+ | `onLoadMore` | `() => void` | | | 다음 페이지 요청 |
1552
+ | `prepending` | `boolean` | | false | 상단에 행이 삽입되는 라이브 목록 |
1553
+ | `onFollowChange` | `(following: boolean) => void` | | | 최신 행 고정 여부 보고 |
1554
+ | `isNew` | `(row: Row) => boolean` | | | 방금 도착한 행 강조 |
1555
+ | `sort` | `LogSort \| null` | | | 정렬 상태 |
1556
+ | `onSortChange` | `(sort: LogSort) => void` | | | 헤더 클릭 정렬 |
1557
+ | `onCellAction` | `(action: LogCellAction) => void` | | | 셀 값 포함/제외 필터 |
1558
+ | `density` | `"compact" \| "normal" \| "comfortable"` | | "normal" | 행 높이와 글자 크기 |
1559
+
1560
+ ### QueryBar
1561
+
1562
+ > 검색과 필터를 한 입력으로 합친 쿼리 바. field:value, -부정, (a or b), 비교 연산, 필드·값 자동완성, 절(clause) 칩을 지원합니다.
1563
+
1564
+ **Import:** `import { QueryBar } from "@reopt-ai/opt-ui"`
1565
+
1566
+ | Prop | Type | Required | Default | Description |
1567
+ | ------------- | ------------------------ | -------- | ------- | ---------------------------- |
1568
+ | `value` | `Query` | Yes | | 파싱된 쿼리 |
1569
+ | `onChange` | `(query: Query) => void` | Yes | | 커밋 시 호출 (Enter·blur) |
1570
+ | `fields` | `QueryField[]` | | | 자동완성할 필드와 알려진 값 |
1571
+ | `showClauses` | `boolean` | | false | 절을 제거 가능한 칩으로 표시 |
1572
+ | `live` | `boolean` | | false | 키 입력마다 커밋 |
1573
+
1574
+ ### FieldSidebar
1575
+
1576
+ > 데이터에 어떤 필드가 있고 각 필드가 무슨 값을 갖는지 보여주는 사이드바. 값 분포 막대, 컬럼으로 승격, 값 기준 포함/제외 필터를 제공합니다.
1577
+
1578
+ **Import:** `import { FieldSidebar } from "@reopt-ai/opt-ui"`
1579
+
1580
+ | Prop | Type | Required | Default | Description |
1581
+ | ----------------------- | ------------------------------------------------------------------------ | -------- | ------- | ------------------------------ |
1582
+ | `fields` | `FieldSummary[]` | Yes | | 필드 목록 |
1583
+ | `expandedField` | `string \| null` | | | 값을 펼친 필드 |
1584
+ | `onExpandedFieldChange` | `(field: string \| null) => void` | | | 펼침 전환 — 호출자가 값을 조회 |
1585
+ | `values` | `FieldValueCount[]` | | | 펼친 필드의 상위 값 |
1586
+ | `valuesLoading` | `boolean` | | false | 값 조회 중 |
1587
+ | `sampledRows` | `number` | | | 집계 대상 행 수 (분모) |
1588
+ | `onToggleColumn` | `(field: string, next: boolean) => void` | | | 컬럼 추가/제거 |
1589
+ | `onFilter` | `(field: string, value: string, intent: "include" \| "exclude") => void` | | | 값 기준 필터 |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Surface Components"
3
3
  description: "0 Surface layer components — props, examples, keyboard shortcuts."
4
- version: "1.4.1"
4
+ version: "1.6.0"
5
5
  generated: true
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Component Reference"
3
- description: "Complete reference for 134 @reopt-ai/opt-ui components across 4 layers."
4
- version: "1.4.1"
3
+ description: "Complete reference for 139 @reopt-ai/opt-ui components across 4 layers."
4
+ version: "1.6.0"
5
5
  generated: true
6
6
  ---
7
7
 
@@ -13,9 +13,9 @@ generated: true
13
13
  | --------- | ------- |
14
14
  | Core | 59 |
15
15
  | Visuals | 0 |
16
- | Shells | 75 |
16
+ | Shells | 80 |
17
17
  | Surfaces | 0 |
18
- | **Total** | **134** |
18
+ | **Total** | **139** |
19
19
 
20
20
  ## Component Selection Guide
21
21
 
@@ -7,7 +7,7 @@ related:
7
7
  - ../02-components/03-shells.md
8
8
  ---
9
9
 
10
- <!-- AI agent hint: Surface/페이지 루트에 직접 space-y-* 사용 금지. 반드시 SurfaceLayout 또는 createSurface 사용. -->
10
+ <!-- AI agent hint: Block/페이지 루트에 직접 space-y-* 사용 금지. 반드시 BlockLayout 또는 createBlock 사용. 페이지 경계를 직접 맡으면 inset="section"을 지정. -->
11
11
 
12
12
  # Layout Recipes
13
13
 
@@ -111,14 +111,14 @@ export function AppLayout({ children }: { children: React.ReactNode }) {
111
111
 
112
112
  ## 2. Data Explorer Page
113
113
 
114
- FilterBar + DataTable + Pagination in a SurfaceLayout.
114
+ FilterBar + DataTable + Pagination in a BlockLayout.
115
115
 
116
116
  ```tsx
117
117
  "use client";
118
118
 
119
119
  import { useState, useMemo } from "react";
120
120
  import {
121
- SurfaceLayout,
121
+ BlockLayout,
122
122
  PageHeader,
123
123
  FilterBar,
124
124
  DataTable,
@@ -221,7 +221,7 @@ export function UserExplorerPage() {
221
221
  };
222
222
 
223
223
  return (
224
- <SurfaceLayout>
224
+ <BlockLayout inset="section">
225
225
  <PageHeader
226
226
  title="사용자 관리"
227
227
  description={`총 ${filtered.length}명`}
@@ -253,20 +253,20 @@ export function UserExplorerPage() {
253
253
  currentPage={page}
254
254
  onPageChange={setPage}
255
255
  />
256
- </SurfaceLayout>
256
+ </BlockLayout>
257
257
  );
258
258
  }
259
259
  ```
260
260
 
261
261
  ## 3. Settings Page with Vertical Tabs
262
262
 
263
- SurfaceLayout with VerticalTabs for section navigation and SettingsForm for each tab.
263
+ BlockLayout with VerticalTabs for section navigation and SettingsForm for each tab.
264
264
 
265
265
  ```tsx
266
266
  "use client";
267
267
 
268
268
  import {
269
- SurfaceLayout,
269
+ BlockLayout,
270
270
  PageHeader,
271
271
  VerticalTabs,
272
272
  SettingsForm,
@@ -391,7 +391,7 @@ const tabs: TabDef[] = [
391
391
 
392
392
  export function SettingsPage() {
393
393
  return (
394
- <SurfaceLayout>
394
+ <BlockLayout inset="section">
395
395
  <PageHeader title="설정" description="프로젝트 설정을 관리합니다" />
396
396
 
397
397
  <VerticalTabs
@@ -399,7 +399,7 @@ export function SettingsPage() {
399
399
  defaultTabId="general"
400
400
  labels={{ ariaLabel: "설정 카테고리" }}
401
401
  />
402
- </SurfaceLayout>
402
+ </BlockLayout>
403
403
  );
404
404
  }
405
405
  ```
@@ -408,14 +408,14 @@ export function SettingsPage() {
408
408
 
409
409
  | Element | Approach |
410
410
  | -------------- | ------------------------------------------------------------------------- |
411
- | Page root | `SurfaceLayout` (provides `gap-section` between children) |
411
+ | Page root | `BlockLayout inset="section"` (page inset + `gap-section`) |
412
412
  | App chrome | `AppShell` + `AppShell.Header/Sidebar/Content/Footer` |
413
413
  | Sidebar nav | `Sidebar` with `Sidebar.Header/Content/Footer` sub-components |
414
- | Page title | `PageHeader` with optional `description` and `actions` slot |
414
+ | Page title | `PageHeader` with optional slots; outer inset belongs to the page root |
415
415
  | Section grids | `gap-group` between columns, `gap-element` for tight spacing |
416
416
  | Tab navigation | `VerticalTabs` for left-side tabs, `ContentTabs` for horizontal |
417
417
  | Pagination | `Pagination` below `DataTable` with `totalItems`/`pageSize`/`currentPage` |
418
- | Loading state | `SurfaceLayout loading={true}` wraps content with `LoadingOverlay` |
418
+ | Loading state | `BlockLayout loading={true}` wraps content with `LoadingOverlay` |
419
419
 
420
420
  ### Semantic Spacing Quick Reference
421
421
 
@@ -423,6 +423,10 @@ export function SettingsPage() {
423
423
  gap-section -> 24px (between major sections)
424
424
  gap-group -> 16px (between related items)
425
425
  gap-element -> 8px (between tightly coupled elements)
426
+ p-section -> 24px (inside a page-owned content boundary)
426
427
  ```
427
428
 
428
429
  CSS variables: `--opt-space-section`, `--opt-space-group`, `--opt-space-element`.
430
+
431
+ `BlockLayout`의 inset 기본값은 없음입니다. 재사용 Block이 카드나 Shell 안에 들어갈 때 이중
432
+ 여백이 생기지 않게 하고, 페이지 콘텐츠 경계를 맡는 호출부만 `inset="section"`을 명시합니다.
@@ -5,7 +5,7 @@ description: "opt-ui 버전별 Breaking/Deprecated 변경사항 레지스트리"
5
5
 
6
6
  # Breaking Changes Registry
7
7
 
8
- 버전별 Breaking/Deprecated 변경사항 레지스트리.
8
+ 공개 디자인 패키지의 버전별 Breaking/Deprecated 변경사항 레지스트리.
9
9
 
10
10
  ## Registry Format
11
11
 
@@ -25,6 +25,51 @@ description: "opt-ui 버전별 Breaking/Deprecated 변경사항 레지스트리"
25
25
 
26
26
  ---
27
27
 
28
+ ## opt-editor Version 2.0.0
29
+
30
+ ### Breaking
31
+
32
+ - version: "2.0.0"
33
+ level: B
34
+ component: "opt-editor/server runtime schemas"
35
+ change: "Zod 런타임 스키마를 /schemas 전용 엔트리로 분리"
36
+ detail: "patchOpSchema, patchOpsArraySchema, createEditorOperationSchema, fieldDefToZod 등 런타임 스키마가 @reopt-ai/opt-editor/server에서 제거되고 @reopt-ai/opt-editor/schemas로 이동했습니다. /ai-sdk 재노출과 type-only export는 유지됩니다."
37
+ scan: '@reopt-ai/opt-editor/server'
38
+ fix:
39
+ type: rename
40
+ from: 'import { patchOpSchema } from "@reopt-ai/opt-editor/server"'
41
+ to: 'import { patchOpSchema } from "@reopt-ai/opt-editor/schemas"'
42
+
43
+ ---
44
+
45
+ ## Version 1.5.0
46
+
47
+ ### Breaking
48
+
49
+ - version: "1.5.0"
50
+ level: B
51
+ component: "Surface runtime exports"
52
+ change: "런타임 Surface export 제거 — opt-cli 블록 registry로 이관"
53
+ detail: "ChatAssistant, DataExplorer, DeploymentCenter 등 런타임 Surface와 createSurface가 @reopt-ai/opt-ui에서 더 이상 export되지 않습니다. 페이지 템플릿은 opt-cli 블록 registry(copy-paste)로 소비합니다."
54
+ scan: "ChatAssistant\\|DataExplorer\\|DeploymentCenter\\|createSurface"
55
+ fix:
56
+ type: manual
57
+ from: 'import { ChatAssistant } from "@reopt-ai/opt-ui"'
58
+ to: "npx @reopt-ai/opt-cli surface add <slug>"
59
+
60
+ ### Deprecated
61
+
62
+ - version: "1.5.0"
63
+ level: D
64
+ component: "SurfaceLayout"
65
+ change: "SurfaceLayout deprecated → BlockLayout / createBlock"
66
+ detail: "SurfaceLayout이 deprecated 되었습니다. 페이지 간격·레이아웃은 BlockLayout 또는 createBlock을 사용하세요."
67
+ scan: "SurfaceLayout"
68
+ fix:
69
+ type: rename
70
+ from: "<SurfaceLayout>"
71
+ to: "<BlockLayout>"
72
+
28
73
  ## Version 1.2.0
29
74
 
30
75
  ### Breaking