@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.
- package/COMPONENT_CATALOG.md +178 -50
- package/README.md +28 -7
- package/dist/app.css +170 -0
- package/dist/core/index.cjs +164 -324
- package/dist/core/index.d.cts +3 -6
- package/dist/core/index.d.ts +3 -6
- package/dist/core/index.js +3 -323
- package/dist/docs/01-getting-started.md +25 -5
- package/dist/docs/02-components/01-core.md +36 -28
- package/dist/docs/02-components/02-visuals.md +1 -1
- package/dist/docs/02-components/03-shells.md +144 -23
- package/dist/docs/02-components/04-surfaces.md +1 -1
- package/dist/docs/02-components/index.md +4 -4
- package/dist/docs/03-recipes/03-layouts.md +16 -12
- package/dist/docs/05-migration/01-breaking-changes.md +46 -1
- package/dist/field-sidebar-BTZCBviA.d.cts +1031 -0
- package/dist/field-sidebar-BTZCBviA.d.cts.map +1 -0
- package/dist/field-sidebar-CB8vjvUM.d.ts +1031 -0
- package/dist/field-sidebar-CB8vjvUM.d.ts.map +1 -0
- package/dist/field-sidebar-Cs-J-5VE.js +4233 -0
- package/dist/field-sidebar-Cs-J-5VE.js.map +1 -0
- package/dist/field-sidebar-CzIQX70-.cjs +4561 -0
- package/dist/id-registry.cjs +1939 -1872
- package/dist/id-registry.d.cts +14 -11
- package/dist/id-registry.d.cts.map +1 -0
- package/dist/id-registry.d.ts +14 -11
- package/dist/id-registry.d.ts.map +1 -0
- package/dist/id-registry.js +1937 -1871
- package/dist/id-registry.js.map +1 -0
- package/dist/id-registry.json +113 -28
- package/dist/index.cjs +8380 -9790
- package/dist/index.d.cts +1555 -1442
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +1555 -1442
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7996 -9778
- package/dist/index.js.map +1 -0
- package/dist/meta.cjs +7753 -6875
- package/dist/meta.d.cts.map +1 -0
- package/dist/meta.d.ts.map +1 -0
- package/dist/meta.js +7752 -6846
- package/dist/meta.js.map +1 -0
- package/dist/pagination-DWbvACuN.js +3850 -0
- package/dist/pagination-DWbvACuN.js.map +1 -0
- package/dist/pagination-DjfxBcjX.cjs +4739 -0
- package/dist/query.cjs +386 -0
- package/dist/query.d.cts +141 -0
- package/dist/query.d.cts.map +1 -0
- package/dist/query.d.ts +141 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +371 -0
- package/dist/query.js.map +1 -0
- package/dist/shader-surface-BUPZ0P-n.js +3654 -0
- package/dist/shader-surface-BUPZ0P-n.js.map +1 -0
- package/dist/shader-surface-BfTP9c1Q.d.ts +1788 -0
- package/dist/shader-surface-BfTP9c1Q.d.ts.map +1 -0
- package/dist/shader-surface-DRrcLrWf.d.cts +1788 -0
- package/dist/shader-surface-DRrcLrWf.d.cts.map +1 -0
- package/dist/shader-surface-Fav5K9UC.cjs +4041 -0
- package/dist/shells/index.cjs +58 -65
- package/dist/shells/index.d.cts +4 -5
- package/dist/shells/index.d.ts +4 -5
- package/dist/shells/index.js +4 -64
- package/dist/tailwind.css +49 -0
- package/dist/theme/presets/default.css +2 -2
- package/dist/theme/presets/minimal.css +2 -2
- package/dist/theme/presets/mono-dark.css +2 -2
- package/dist/theme/presets/natural.css +1 -1
- package/dist/theme/presets/pro.css +2 -2
- package/dist/theme/server.cjs +257 -228
- package/dist/theme/server.d.cts +48 -60
- package/dist/theme/server.d.cts.map +1 -0
- package/dist/theme/server.d.ts +48 -60
- package/dist/theme/server.d.ts.map +1 -0
- package/dist/theme/server.js +234 -189
- package/dist/theme/server.js.map +1 -0
- package/dist/types-D0FlcYnM.d.cts +301 -0
- package/dist/types-D0FlcYnM.d.cts.map +1 -0
- package/dist/types-D0FlcYnM.d.ts +301 -0
- package/dist/types-D0FlcYnM.d.ts.map +1 -0
- package/dist/visuals/index.cjs +10 -4
- package/dist/visuals/index.d.cts +2 -1
- package/dist/visuals/index.d.ts +2 -1
- package/dist/visuals/index.js +1 -2
- package/package.json +27 -11
- package/dist/chunk-3GWWZKX7.js +0 -38
- package/dist/chunk-3QFYBBL6.cjs +0 -4759
- package/dist/chunk-3XD4HIFL.js +0 -3241
- package/dist/chunk-AFF2HPE5.cjs +0 -5008
- package/dist/chunk-NXZJIHEZ.cjs +0 -3241
- package/dist/chunk-ONE3C5RV.cjs +0 -38
- package/dist/chunk-RBM2RNC2.js +0 -5008
- package/dist/chunk-VBGPEW45.js +0 -4759
- package/dist/index-BZ_lBlO1.d.ts +0 -474
- package/dist/index-BuvxoWHf.d.cts +0 -474
- package/dist/index-DWyqDIkH.d.cts +0 -1689
- package/dist/index-Uyijm14M.d.ts +0 -1689
- package/dist/types-D4-0lwaE.d.cts +0 -298
- package/dist/types-D4-0lwaE.d.ts +0 -298
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Shell Components"
|
|
3
|
-
description: "
|
|
4
|
-
version: "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 (
|
|
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
|
|
948
|
-
| ----------------- | ------------------------------------------------ | -------- |
|
|
949
|
-
| `accept` | `string` | | "image
|
|
950
|
-
| `showPreview` | `boolean` | | true
|
|
951
|
-
| `showFileInfo` | `boolean` | | true
|
|
952
|
-
| `showDescription` | `boolean` | | true
|
|
953
|
-
| `maxFileSize` | `number` | |
|
|
954
|
-
| `onSubmit` | `(values: { title, description, file }) => void` | |
|
|
955
|
-
| `labels` | `FileUploadFormLabels` | |
|
|
956
|
-
| `onPreview` | `(file: File) => void` | |
|
|
957
|
-
| `columnMapping` | `ReactNode` | |
|
|
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
|
|
1299
|
-
|
|
|
1300
|
-
| PageAside
|
|
1301
|
-
| FailureList
|
|
1302
|
-
| KeyValueEditor
|
|
1303
|
-
| AuditTimeline
|
|
1304
|
-
| ChatSidebar
|
|
1305
|
-
| ChatInput
|
|
1306
|
-
| 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: "Component Reference"
|
|
3
|
-
description: "Complete reference for
|
|
4
|
-
version: "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 |
|
|
16
|
+
| Shells | 80 |
|
|
17
17
|
| Surfaces | 0 |
|
|
18
|
-
| **Total** | **
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
-
<
|
|
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
|
-
</
|
|
256
|
+
</BlockLayout>
|
|
257
257
|
);
|
|
258
258
|
}
|
|
259
259
|
```
|
|
260
260
|
|
|
261
261
|
## 3. Settings Page with Vertical Tabs
|
|
262
262
|
|
|
263
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
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
|
-
</
|
|
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 | `
|
|
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
|
|
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 | `
|
|
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
|