@reopt-ai/opt-ui 1.12.4 → 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.
Files changed (39) hide show
  1. package/CHANGELOG.md +236 -0
  2. package/COMPONENT_CATALOG.md +290 -111
  3. package/dist/core/index.cjs +13 -13
  4. package/dist/core/index.d.cts +2 -2
  5. package/dist/core/index.d.ts +2 -2
  6. package/dist/core/index.js +2 -2
  7. package/dist/docs/02-components/01-core.md +49 -49
  8. package/dist/docs/02-components/02-visuals.md +1 -1
  9. package/dist/docs/02-components/03-shells.md +260 -63
  10. package/dist/docs/02-components/04-surfaces.md +1 -1
  11. package/dist/docs/02-components/index.md +4 -4
  12. package/dist/{field-sidebar-C8bDzGPs.js → field-sidebar-CRdToHRO.js} +3975 -235
  13. package/dist/{field-sidebar-DX5wP0qn.cjs → field-sidebar-CxxSK4JO.cjs} +4338 -244
  14. package/dist/{field-sidebar-Ct8c9L4V.d.cts → field-sidebar-D-rwuN_w.d.cts} +824 -2
  15. package/dist/{field-sidebar-YaWHfLLW.d.ts → field-sidebar-Dz7J4ett.d.ts} +824 -2
  16. package/dist/id-registry.cjs +72 -0
  17. package/dist/id-registry.js +72 -0
  18. package/dist/id-registry.json +153 -0
  19. package/dist/index.cjs +334 -1419
  20. package/dist/index.d.cts +51 -86
  21. package/dist/index.d.ts +51 -86
  22. package/dist/index.js +248 -1356
  23. package/dist/{key-pad-menu-1YN221Oi.cjs → key-pad-menu-0KWOnELe.cjs} +53 -483
  24. package/dist/{key-pad-menu-CwcY_Vps.d.cts → key-pad-menu-BOVu97bj.d.cts} +4 -55
  25. package/dist/{key-pad-menu-CUiQ-vKw.js → key-pad-menu-DMmbQ1jF.js} +54 -418
  26. package/dist/{key-pad-menu-WBJShCJn.d.ts → key-pad-menu-NlZ9zNF8.d.ts} +4 -55
  27. package/dist/meta.cjs +896 -7
  28. package/dist/meta.js +896 -7
  29. package/dist/shells/index.cjs +20 -1
  30. package/dist/shells/index.d.cts +2 -2
  31. package/dist/shells/index.d.ts +2 -2
  32. package/dist/shells/index.js +2 -2
  33. package/dist/{text-truncate-BFWd2cE_.js → text-truncate-Bd-0WkSP.js} +463 -99
  34. package/dist/{text-truncate-DsG5UAOY.cjs → text-truncate-BeYW6XZu.cjs} +525 -101
  35. package/dist/{text-truncate-CQyfUZvq.d.cts → text-truncate-eMzvU_7k.d.cts} +52 -1
  36. package/dist/{text-truncate-CQyfUZvq.d.ts → text-truncate-eMzvU_7k.d.ts} +52 -1
  37. package/dist/theme/server.cjs +2 -2
  38. package/dist/theme/server.js +2 -2
  39. package/package.json +6 -2
package/dist/meta.cjs CHANGED
@@ -1221,6 +1221,10 @@ const coreMetas = [
1221
1221
  },
1222
1222
  {
1223
1223
  name: "setOpen",
1224
+ deprecated: {
1225
+ since: "1.12.5",
1226
+ replacement: "onOpenChange"
1227
+ },
1224
1228
  type: "(open: boolean) => void",
1225
1229
  description: "제어 모드: 상태 변경 핸들러"
1226
1230
  },
@@ -1298,6 +1302,10 @@ const coreMetas = [
1298
1302
  },
1299
1303
  {
1300
1304
  name: "setSelectedId",
1305
+ deprecated: {
1306
+ since: "1.12.5",
1307
+ replacement: "onSelectedIdChange"
1308
+ },
1301
1309
  type: "(id: string | null) => void",
1302
1310
  description: "제어 모드: 탭 변경 핸들러"
1303
1311
  }
@@ -1466,6 +1474,10 @@ const coreMetas = [
1466
1474
  },
1467
1475
  {
1468
1476
  name: "gutter",
1477
+ deprecated: {
1478
+ since: "1.12.5",
1479
+ replacement: "sideOffset"
1480
+ },
1469
1481
  type: "number",
1470
1482
  default: "4",
1471
1483
  description: "트리거와의 간격 (px)"
@@ -1544,6 +1556,10 @@ const coreMetas = [
1544
1556
  description: "제어 모드: 열림 상태"
1545
1557
  }, {
1546
1558
  name: "setOpen",
1559
+ deprecated: {
1560
+ since: "1.12.5",
1561
+ replacement: "onOpenChange"
1562
+ },
1547
1563
  type: "(open: boolean) => void",
1548
1564
  description: "제어 모드: 상태 변경 핸들러"
1549
1565
  }],
@@ -1667,6 +1683,10 @@ const coreMetas = [
1667
1683
  props: {
1668
1684
  ComboboxRoot: [{
1669
1685
  name: "setValue",
1686
+ deprecated: {
1687
+ since: "1.12.5",
1688
+ replacement: "onValueChange"
1689
+ },
1670
1690
  type: "(value: string) => void",
1671
1691
  description: "입력값 변경 핸들러"
1672
1692
  }, {
@@ -1708,6 +1728,10 @@ const coreMetas = [
1708
1728
  },
1709
1729
  {
1710
1730
  name: "gutter",
1731
+ deprecated: {
1732
+ since: "1.12.5",
1733
+ replacement: "sideOffset"
1734
+ },
1711
1735
  type: "number",
1712
1736
  default: "4",
1713
1737
  description: "입력과의 간격 (px)"
@@ -1839,6 +1863,10 @@ const coreMetas = [
1839
1863
  },
1840
1864
  {
1841
1865
  name: "gutter",
1866
+ deprecated: {
1867
+ since: "1.12.5",
1868
+ replacement: "sideOffset"
1869
+ },
1842
1870
  type: "number",
1843
1871
  default: "8",
1844
1872
  description: "트리거와의 간격 (px)"
@@ -2192,6 +2220,10 @@ const coreMetas = [
2192
2220
  },
2193
2221
  {
2194
2222
  name: "gutter",
2223
+ deprecated: {
2224
+ since: "1.12.5",
2225
+ replacement: "sideOffset"
2226
+ },
2195
2227
  type: "number",
2196
2228
  default: "4",
2197
2229
  description: "트리거와의 간격 (px)"
@@ -3949,6 +3981,10 @@ const store = useFormStore({ defaultValues: { name: "" } });
3949
3981
  }],
3950
3982
  props: { PopoverContent: [{
3951
3983
  name: "gutter",
3984
+ deprecated: {
3985
+ since: "1.12.5",
3986
+ replacement: "sideOffset"
3987
+ },
3952
3988
  type: "number",
3953
3989
  default: "8",
3954
3990
  description: "트리거와의 간격 (px)"
@@ -3989,6 +4025,10 @@ const store = useFormStore({ defaultValues: { name: "" } });
3989
4025
  props: {
3990
4026
  DropdownContent: [{
3991
4027
  name: "gutter",
4028
+ deprecated: {
4029
+ since: "1.12.5",
4030
+ replacement: "sideOffset"
4031
+ },
3992
4032
  type: "number",
3993
4033
  default: "4",
3994
4034
  description: "트리거와의 간격 (px)"
@@ -4999,6 +5039,7 @@ const MyDashboard = createBlock<MyDashboardProps>(
4999
5039
  description: "페이지에 머무는 인페이지 고지. Alert와 달리 dismiss가 없고, 조건이 참인 동안 레이아웃의 일부로 남습니다.",
5000
5040
  slug: "callout",
5001
5041
  exports: ["Callout"],
5042
+ ariaRole: "status",
5002
5043
  props: { Callout: [
5003
5044
  {
5004
5045
  name: "tone",
@@ -6940,15 +6981,26 @@ const filters = [
6940
6981
  {
6941
6982
  name: "QueryResultsTable",
6942
6983
  category: "shell",
6943
- description: "쿼리 결과 테이블. SQL 결과와 스크린 리더에 안내되는 로딩, 에러, 빈 상태를 지원합니다.",
6984
+ functionalCategory: "data-display",
6985
+ maturity: "stable",
6986
+ keywords: [
6987
+ "sql",
6988
+ "query",
6989
+ "results",
6990
+ "grid",
6991
+ "table",
6992
+ "virtualized"
6993
+ ],
6994
+ description: "쿼리 결과 테이블. 타입이 표시되는 헤더, 로컬 정렬, 컬럼 리사이즈, 행 상세 패널을 갖추고 행을 윈도잉해 만 행도 스크롤로 다룹니다. NULL·불리언·객체를 빈칸 대신 글자로 씁니다.",
6944
6995
  slug: "query-results-table",
6945
6996
  exports: ["QueryResultsTable"],
6997
+ domlessExports: ["formatQueryCell"],
6946
6998
  props: { QueryResultsTable: [
6947
6999
  {
6948
7000
  name: "columns",
6949
- type: "string[]",
7001
+ type: "Array<string | QueryResultColumn>",
6950
7002
  required: true,
6951
- description: "컬럼 이름"
7003
+ description: "컬럼 이름, 또는 타입을 포함한 컬럼 정의"
6952
7004
  },
6953
7005
  {
6954
7006
  name: "rows",
@@ -6956,6 +7008,12 @@ const filters = [
6956
7008
  required: true,
6957
7009
  description: "결과 행"
6958
7010
  },
7011
+ {
7012
+ name: "maxHeight",
7013
+ type: "number | \"fill\"",
7014
+ default: "400",
7015
+ description: "스크롤 높이(px). fill이면 부모 높이를 채움"
7016
+ },
6959
7017
  {
6960
7018
  name: "loading",
6961
7019
  type: "boolean",
@@ -6966,12 +7024,59 @@ const filters = [
6966
7024
  type: "string",
6967
7025
  description: "assertive 오류 상태"
6968
7026
  },
7027
+ {
7028
+ name: "sortable",
7029
+ type: "boolean",
7030
+ default: "true",
7031
+ description: "헤더 클릭 정렬"
7032
+ },
7033
+ {
7034
+ name: "sort",
7035
+ type: "QueryResultSort | null",
7036
+ description: "제어형 정렬 상태"
7037
+ },
7038
+ {
7039
+ name: "onSortChange",
7040
+ type: "(sort: QueryResultSort | null) => void",
7041
+ description: "정렬 변경"
7042
+ },
7043
+ {
7044
+ name: "rowHeight",
7045
+ type: "number",
7046
+ default: "32",
7047
+ description: "행 높이(px). 윈도잉의 기준"
7048
+ },
7049
+ {
7050
+ name: "rowDetails",
7051
+ type: "boolean",
7052
+ default: "true",
7053
+ description: "행을 상세 패널로 열기"
7054
+ },
7055
+ {
7056
+ name: "footer",
7057
+ type: "ReactNode",
7058
+ description: "행 수 뒤에 붙는 푸터 내용 — 경과 시간, 읽은 바이트"
7059
+ },
6969
7060
  {
6970
7061
  name: "labels",
6971
7062
  type: "QueryResultsTableLabels",
6972
- description: "로딩/빈 상태/행 문구"
7063
+ description: "로딩/빈 상태/행 수/정렬/상세 문구"
6973
7064
  }
6974
7065
  ] },
7066
+ dependencies: [
7067
+ {
7068
+ slug: "field-token",
7069
+ category: "core"
7070
+ },
7071
+ {
7072
+ slug: "flyout",
7073
+ category: "shell"
7074
+ },
7075
+ {
7076
+ slug: "description-list",
7077
+ category: "core"
7078
+ }
7079
+ ],
6975
7080
  testDescribe: "QueryResultsTable"
6976
7081
  },
6977
7082
  {
@@ -7011,12 +7116,12 @@ const filters = [
7011
7116
  },
7012
7117
  {
7013
7118
  name: "onRun",
7014
- type: "(sql: string) => void",
7015
- description: "Mod+Enter 실행 핸들러"
7119
+ type: "(sql: string, context: SqlEditorRunContext) => void",
7120
+ description: "Mod+Enter 실행 핸들러. 두 번째 인자로 선택 영역과 커서 위치"
7016
7121
  },
7017
7122
  {
7018
7123
  name: "onRunAndAdvance",
7019
- type: "(sql: string) => void",
7124
+ type: "(sql: string, context: SqlEditorRunContext) => void",
7020
7125
  description: "Shift+Enter — 실행 후 다음 셀/탭으로 이동"
7021
7126
  },
7022
7127
  {
@@ -7069,6 +7174,18 @@ const filters = [
7069
7174
  type: "boolean",
7070
7175
  description: "실행 힌트/버튼 표시. 기본값은 onRun이 있을 때 표시"
7071
7176
  },
7177
+ {
7178
+ name: "lineNumbers",
7179
+ type: "boolean",
7180
+ default: "true",
7181
+ description: "줄 번호 거터"
7182
+ },
7183
+ {
7184
+ name: "theme",
7185
+ type: "SqlEditorTheme",
7186
+ default: "\"auto\"",
7187
+ description: "편집기 색상. auto는 OptThemeProvider의 resolved mode를 따름"
7188
+ },
7072
7189
  {
7073
7190
  name: "labels",
7074
7191
  type: "SqlEditorLabels",
@@ -9881,6 +9998,778 @@ const messages = [
9881
9998
  avoid: ["선택 초기화를 호출자에게 맡기지 않습니다 — 보이지 않는 행에 일괄 작업이 적용됩니다."]
9882
9999
  },
9883
10000
  testDescribe: "CatalogFrame"
10001
+ },
10002
+ {
10003
+ name: "SchemaTree",
10004
+ category: "shell",
10005
+ functionalCategory: "navigation",
10006
+ maturity: "stable",
10007
+ keywords: [
10008
+ "sql",
10009
+ "schema",
10010
+ "tables",
10011
+ "columns",
10012
+ "tree",
10013
+ "autocomplete"
10014
+ ],
10015
+ description: "쿼리할 수 있는 테이블과 컬럼을 타입 글리프와 함께 보여주는 트리. 테이블·컬럼을 함께 검색하고, 이름을 커서에 삽입하거나 테이블을 미리보기합니다.",
10016
+ slug: "schema-tree",
10017
+ exports: ["SchemaTree"],
10018
+ props: { SchemaTree: [
10019
+ {
10020
+ name: "tables",
10021
+ type: "SchemaTreeTable[]",
10022
+ required: true,
10023
+ description: "테이블과 컬럼"
10024
+ },
10025
+ {
10026
+ name: "loading",
10027
+ type: "boolean",
10028
+ description: "스키마 조회 중"
10029
+ },
10030
+ {
10031
+ name: "defaultExpanded",
10032
+ type: "string[]",
10033
+ description: "처음에 펼칠 테이블. 생략 시 첫 테이블"
10034
+ },
10035
+ {
10036
+ name: "onInsert",
10037
+ type: "(name: string, kind: \"table\" | \"column\", table: string) => void",
10038
+ description: "이름을 편집기 커서에 삽입"
10039
+ },
10040
+ {
10041
+ name: "onPreview",
10042
+ type: "(table: string) => void",
10043
+ description: "테이블 미리보기 실행. SQL은 호출자가 작성"
10044
+ },
10045
+ {
10046
+ name: "header",
10047
+ type: "ReactNode",
10048
+ description: "검색창 위 내용"
10049
+ },
10050
+ {
10051
+ name: "labels",
10052
+ type: "SchemaTreeLabels",
10053
+ description: "문구 오버라이드"
10054
+ }
10055
+ ] },
10056
+ dependencies: [{
10057
+ slug: "field-token",
10058
+ category: "core"
10059
+ }, {
10060
+ slug: "highlight",
10061
+ category: "core"
10062
+ }],
10063
+ ariaRole: "complementary",
10064
+ testDescribe: "SchemaTree"
10065
+ },
10066
+ {
10067
+ name: "QueryToolbar",
10068
+ category: "shell",
10069
+ functionalCategory: "action",
10070
+ maturity: "stable",
10071
+ keywords: [
10072
+ "sql",
10073
+ "run",
10074
+ "cancel",
10075
+ "toolbar",
10076
+ "shortcut"
10077
+ ],
10078
+ description: "실행 버튼 하나가 상태를 말하는 쿼리 툴바. 변경됨/현재/실행 중을 색과 문구로 구분하고, 실행 중이면 취소로 바뀌며, 선택 영역·전체 실행은 분할 버튼 뒤에 둡니다.",
10079
+ slug: "query-toolbar",
10080
+ exports: ["QueryToolbar"],
10081
+ props: { QueryToolbar: [
10082
+ {
10083
+ name: "onRun",
10084
+ type: "() => void",
10085
+ required: true,
10086
+ description: "커서 위치의 문장 실행"
10087
+ },
10088
+ {
10089
+ name: "onCancel",
10090
+ type: "() => void",
10091
+ description: "실행 중 취소. 있으면 버튼이 Cancel로 전환"
10092
+ },
10093
+ {
10094
+ name: "running",
10095
+ type: "boolean",
10096
+ description: "실행 중"
10097
+ },
10098
+ {
10099
+ name: "runState",
10100
+ type: "QueryRunState",
10101
+ default: "\"idle\"",
10102
+ description: "마지막 실행 대비 변경 여부"
10103
+ },
10104
+ {
10105
+ name: "runDisabledReason",
10106
+ type: "string",
10107
+ description: "실행 불가 사유. 툴팁으로 표시"
10108
+ },
10109
+ {
10110
+ name: "onRunSelection",
10111
+ type: "() => void",
10112
+ description: "선택 영역만 실행"
10113
+ },
10114
+ {
10115
+ name: "hasSelection",
10116
+ type: "boolean",
10117
+ description: "선택 영역이 있는지. 없으면 항목 비활성"
10118
+ },
10119
+ {
10120
+ name: "onRunAll",
10121
+ type: "() => void",
10122
+ description: "전체 문장 실행"
10123
+ },
10124
+ {
10125
+ name: "multiStatement",
10126
+ type: "boolean",
10127
+ description: "문장이 둘 이상인지. 아니면 전체 실행을 숨김"
10128
+ },
10129
+ {
10130
+ name: "onSave",
10131
+ type: "() => void",
10132
+ description: "저장 다이얼로그 열기"
10133
+ },
10134
+ {
10135
+ name: "saveDisabled",
10136
+ type: "boolean",
10137
+ description: "저장 비활성"
10138
+ },
10139
+ {
10140
+ name: "children",
10141
+ type: "ReactNode",
10142
+ description: "실행 그룹 뒤의 컨트롤 — 필터, 변수"
10143
+ },
10144
+ {
10145
+ name: "trailing",
10146
+ type: "ReactNode",
10147
+ description: "끝쪽 컨트롤"
10148
+ },
10149
+ {
10150
+ name: "modifierKey",
10151
+ type: "string",
10152
+ description: "단축키 힌트의 수정자 글리프. 기본은 플랫폼 감지"
10153
+ },
10154
+ {
10155
+ name: "labels",
10156
+ type: "QueryToolbarLabels",
10157
+ description: "문구 오버라이드"
10158
+ }
10159
+ ] },
10160
+ dependencies: [
10161
+ {
10162
+ slug: "button",
10163
+ category: "core"
10164
+ },
10165
+ {
10166
+ slug: "kbd",
10167
+ category: "core"
10168
+ },
10169
+ {
10170
+ slug: "dropdown-menu",
10171
+ category: "core"
10172
+ }
10173
+ ],
10174
+ ariaRole: "toolbar",
10175
+ testDescribe: "QueryToolbar"
10176
+ },
10177
+ {
10178
+ name: "QueryOutputPane",
10179
+ category: "shell",
10180
+ functionalCategory: "data-display",
10181
+ maturity: "stable",
10182
+ keywords: [
10183
+ "sql",
10184
+ "results",
10185
+ "chart",
10186
+ "split",
10187
+ "status bar"
10188
+ ],
10189
+ description: "쿼리 결과가 놓이는 출력 패널. 대기·실행 중·오류·취소·완료 상태를 그리고, 완료는 표·차트·좌우 분할로 전환하며, 상태바에 행 수·경과·읽은 바이트·절단 여부를 남깁니다.",
10190
+ slug: "query-output-pane",
10191
+ exports: ["QueryOutputPane"],
10192
+ props: { QueryOutputPane: [
10193
+ {
10194
+ name: "view",
10195
+ type: "QueryOutputView",
10196
+ required: true,
10197
+ description: "표 / 차트 / 분할"
10198
+ },
10199
+ {
10200
+ name: "onViewChange",
10201
+ type: "(view: QueryOutputView) => void",
10202
+ required: true,
10203
+ description: "뷰 전환"
10204
+ },
10205
+ {
10206
+ name: "results",
10207
+ type: "ReactNode",
10208
+ required: true,
10209
+ description: "결과 테이블"
10210
+ },
10211
+ {
10212
+ name: "chart",
10213
+ type: "ReactNode",
10214
+ description: "차트 빌더. 없으면 차트 뷰를 숨김"
10215
+ },
10216
+ {
10217
+ name: "status",
10218
+ type: "\"idle\" | \"running\" | \"success\" | \"error\" | \"cancelled\"",
10219
+ required: true,
10220
+ description: "실행 수명주기"
10221
+ },
10222
+ {
10223
+ name: "error",
10224
+ type: "string",
10225
+ description: "백엔드 오류 원문"
10226
+ },
10227
+ {
10228
+ name: "runningSeconds",
10229
+ type: "number",
10230
+ description: "실행 경과 초. 로딩 상태에 표시"
10231
+ },
10232
+ {
10233
+ name: "onCancel",
10234
+ type: "() => void",
10235
+ description: "실행 취소"
10236
+ },
10237
+ {
10238
+ name: "stats",
10239
+ type: "QueryRunStats",
10240
+ description: "행 수, 경과, 읽은 바이트, 절단 여부"
10241
+ },
10242
+ {
10243
+ name: "actions",
10244
+ type: "ReactNode",
10245
+ description: "뷰 전환 오른쪽 컨트롤"
10246
+ },
10247
+ {
10248
+ name: "statusExtra",
10249
+ type: "ReactNode",
10250
+ description: "상태바 추가 내용"
10251
+ },
10252
+ {
10253
+ name: "banner",
10254
+ type: "ReactNode",
10255
+ description: "출력 위 알림"
10256
+ },
10257
+ {
10258
+ name: "onRetry",
10259
+ type: "() => void",
10260
+ description: "오류 상태 닫기"
10261
+ },
10262
+ {
10263
+ name: "labels",
10264
+ type: "QueryOutputPaneLabels",
10265
+ description: "문구 오버라이드"
10266
+ }
10267
+ ] },
10268
+ dependencies: [
10269
+ {
10270
+ slug: "segmented-control",
10271
+ category: "core"
10272
+ },
10273
+ {
10274
+ slug: "empty-state",
10275
+ category: "core"
10276
+ },
10277
+ {
10278
+ slug: "resizable",
10279
+ category: "core"
10280
+ }
10281
+ ],
10282
+ ariaRole: "region",
10283
+ testDescribe: "QueryOutputPane"
10284
+ },
10285
+ {
10286
+ name: "QueryResultChart",
10287
+ category: "shell",
10288
+ functionalCategory: "data-display",
10289
+ maturity: "stable",
10290
+ keywords: [
10291
+ "sql",
10292
+ "chart",
10293
+ "visualization",
10294
+ "line",
10295
+ "bar",
10296
+ "pie",
10297
+ "number"
10298
+ ],
10299
+ description: "결과 행을 차트로 그리는 빌더. 첫 문자·날짜 컬럼을 축으로, 숫자 컬럼을 값으로 고르고, 한 행 한 숫자면 큰 숫자로 보여줍니다. 설정은 호출자가 들고 있어 저장 쿼리와 함께 보관됩니다.",
10300
+ slug: "query-result-chart",
10301
+ exports: ["QueryResultChart"],
10302
+ domlessExports: ["defaultQueryChartConfig", "numericResultColumns"],
10303
+ props: { QueryResultChart: [
10304
+ {
10305
+ name: "columns",
10306
+ type: "QueryResultColumn[]",
10307
+ required: true,
10308
+ description: "결과 컬럼"
10309
+ },
10310
+ {
10311
+ name: "rows",
10312
+ type: "Array<Record<string, unknown>>",
10313
+ required: true,
10314
+ description: "결과 행"
10315
+ },
10316
+ {
10317
+ name: "config",
10318
+ type: "QueryChartConfig",
10319
+ required: true,
10320
+ description: "차트 종류, 축, 값 컬럼"
10321
+ },
10322
+ {
10323
+ name: "onConfigChange",
10324
+ type: "(config: QueryChartConfig) => void",
10325
+ required: true,
10326
+ description: "설정 변경"
10327
+ },
10328
+ {
10329
+ name: "showControls",
10330
+ type: "boolean",
10331
+ default: "true",
10332
+ description: "컨트롤 표시. 임베드 카드에서는 끔"
10333
+ },
10334
+ {
10335
+ name: "height",
10336
+ type: "number",
10337
+ description: "차트 높이(px). 기본은 부모 채움"
10338
+ },
10339
+ {
10340
+ name: "maxPoints",
10341
+ type: "number",
10342
+ default: "1000",
10343
+ description: "차트에 그릴 최대 행 수"
10344
+ },
10345
+ {
10346
+ name: "labels",
10347
+ type: "QueryResultChartLabels",
10348
+ description: "문구 오버라이드"
10349
+ }
10350
+ ] },
10351
+ dependencies: [
10352
+ {
10353
+ slug: "line-chart",
10354
+ category: "visuals"
10355
+ },
10356
+ {
10357
+ slug: "bar-chart",
10358
+ category: "visuals"
10359
+ },
10360
+ {
10361
+ slug: "area-chart",
10362
+ category: "visuals"
10363
+ },
10364
+ {
10365
+ slug: "pie-chart",
10366
+ category: "visuals"
10367
+ },
10368
+ {
10369
+ slug: "segmented-control",
10370
+ category: "core"
10371
+ },
10372
+ {
10373
+ slug: "select",
10374
+ category: "core"
10375
+ }
10376
+ ],
10377
+ testDescribe: "QueryResultChart"
10378
+ },
10379
+ {
10380
+ name: "QueryFiltersMenu",
10381
+ category: "shell",
10382
+ functionalCategory: "input",
10383
+ maturity: "stable",
10384
+ keywords: [
10385
+ "sql",
10386
+ "filters",
10387
+ "date range",
10388
+ "placeholder",
10389
+ "where"
10390
+ ],
10391
+ description: "기간과 속성 조건을 데이터로 들고 {filters} 플레이스홀더로 SQL에 전달하는 메뉴. 플레이스홀더가 없으면 조건이 적용되지 않는다고 경고하고 삽입 버튼을 제공합니다.",
10392
+ slug: "query-filters-menu",
10393
+ exports: ["QueryFiltersMenu"],
10394
+ domlessExports: [
10395
+ "EMPTY_QUERY_FILTERS",
10396
+ "VALUELESS_OPERATORS",
10397
+ "hasActiveQueryFilters",
10398
+ "countActiveQueryFilters"
10399
+ ],
10400
+ props: { QueryFiltersMenu: [
10401
+ {
10402
+ name: "value",
10403
+ type: "QueryFilters",
10404
+ required: true,
10405
+ description: "기간과 속성 필터"
10406
+ },
10407
+ {
10408
+ name: "onChange",
10409
+ type: "(filters: QueryFilters) => void",
10410
+ required: true,
10411
+ description: "필터 변경"
10412
+ },
10413
+ {
10414
+ name: "fields",
10415
+ type: "QueryFilterField[]",
10416
+ required: true,
10417
+ description: "필드 선택지"
10418
+ },
10419
+ {
10420
+ name: "placeholderPresent",
10421
+ type: "boolean",
10422
+ description: "SQL에 {filters}가 있는지"
10423
+ },
10424
+ {
10425
+ name: "onInsertPlaceholder",
10426
+ type: "() => void",
10427
+ description: "{filters}를 커서에 삽입"
10428
+ },
10429
+ {
10430
+ name: "onLoadValues",
10431
+ type: "(field: string) => Promise<string[]>",
10432
+ description: "필드의 알려진 값. 값 입력란의 제안으로 쓰이며 자유 입력도 허용"
10433
+ },
10434
+ {
10435
+ name: "presets",
10436
+ type: "DateRangePreset[]",
10437
+ description: "기간 프리셋"
10438
+ },
10439
+ {
10440
+ name: "disabled",
10441
+ type: "boolean",
10442
+ description: "비활성"
10443
+ },
10444
+ {
10445
+ name: "labels",
10446
+ type: "QueryFiltersMenuLabels",
10447
+ description: "문구 오버라이드"
10448
+ }
10449
+ ] },
10450
+ dependencies: [
10451
+ {
10452
+ slug: "popover",
10453
+ category: "core"
10454
+ },
10455
+ {
10456
+ slug: "date-range-picker",
10457
+ category: "core"
10458
+ },
10459
+ {
10460
+ slug: "select",
10461
+ category: "core"
10462
+ },
10463
+ {
10464
+ slug: "combobox",
10465
+ category: "core"
10466
+ },
10467
+ {
10468
+ slug: "callout",
10469
+ category: "core"
10470
+ }
10471
+ ],
10472
+ testDescribe: "QueryFiltersMenu"
10473
+ },
10474
+ {
10475
+ name: "QueryVariablesMenu",
10476
+ category: "shell",
10477
+ functionalCategory: "input",
10478
+ maturity: "stable",
10479
+ keywords: [
10480
+ "sql",
10481
+ "variables",
10482
+ "parameters",
10483
+ "placeholder"
10484
+ ],
10485
+ description: "실행마다 바뀌는 값을 이름 붙여 두는 변수 메뉴. SQL은 {variables.name}으로 참조하고 치환은 호출자가 합니다.",
10486
+ slug: "query-variables-menu",
10487
+ exports: ["QueryVariablesMenu"],
10488
+ domlessExports: ["isValidQueryVariableName"],
10489
+ props: { QueryVariablesMenu: [
10490
+ {
10491
+ name: "value",
10492
+ type: "QueryVariable[]",
10493
+ required: true,
10494
+ description: "변수 목록"
10495
+ },
10496
+ {
10497
+ name: "onChange",
10498
+ type: "(variables: QueryVariable[]) => void",
10499
+ required: true,
10500
+ description: "변수 변경"
10501
+ },
10502
+ {
10503
+ name: "onInsert",
10504
+ type: "(name: string) => void",
10505
+ description: "{variables.name}을 커서에 삽입"
10506
+ },
10507
+ {
10508
+ name: "disabled",
10509
+ type: "boolean",
10510
+ description: "비활성"
10511
+ },
10512
+ {
10513
+ name: "disabledReason",
10514
+ type: "string",
10515
+ description: "비활성 사유. 툴팁으로 표시"
10516
+ },
10517
+ {
10518
+ name: "labels",
10519
+ type: "QueryVariablesMenuLabels",
10520
+ description: "문구 오버라이드"
10521
+ }
10522
+ ] },
10523
+ dependencies: [{
10524
+ slug: "popover",
10525
+ category: "core"
10526
+ }, {
10527
+ slug: "input",
10528
+ category: "core"
10529
+ }],
10530
+ testDescribe: "QueryVariablesMenu"
10531
+ },
10532
+ {
10533
+ name: "QueryHistoryList",
10534
+ category: "shell",
10535
+ functionalCategory: "data-display",
10536
+ maturity: "stable",
10537
+ keywords: [
10538
+ "sql",
10539
+ "history",
10540
+ "recent",
10541
+ "rerun"
10542
+ ],
10543
+ description: "실행 이력 목록. 각 실행의 성공/실패, 시각, 행 수, 경과를 보여주고 편집기로 되돌리거나 다시 실행합니다.",
10544
+ slug: "query-history-list",
10545
+ exports: ["QueryHistoryList"],
10546
+ props: { QueryHistoryList: [
10547
+ {
10548
+ name: "items",
10549
+ type: "QueryHistoryItem[]",
10550
+ required: true,
10551
+ description: "최근 실행부터"
10552
+ },
10553
+ {
10554
+ name: "loading",
10555
+ type: "boolean",
10556
+ description: "이력 조회 중"
10557
+ },
10558
+ {
10559
+ name: "onLoad",
10560
+ type: "(item: QueryHistoryItem) => void",
10561
+ description: "쿼리를 편집기로"
10562
+ },
10563
+ {
10564
+ name: "onRerun",
10565
+ type: "(item: QueryHistoryItem) => void",
10566
+ description: "그대로 다시 실행"
10567
+ },
10568
+ {
10569
+ name: "onClear",
10570
+ type: "() => void",
10571
+ description: "이력 비우기"
10572
+ },
10573
+ {
10574
+ name: "header",
10575
+ type: "ReactNode",
10576
+ description: "목록 위 내용"
10577
+ },
10578
+ {
10579
+ name: "labels",
10580
+ type: "QueryHistoryListLabels",
10581
+ description: "문구 오버라이드"
10582
+ }
10583
+ ] },
10584
+ dependencies: [{
10585
+ slug: "button",
10586
+ category: "core"
10587
+ }],
10588
+ ariaRole: "region",
10589
+ testDescribe: "QueryHistoryList"
10590
+ },
10591
+ {
10592
+ name: "SaveQueryDialog",
10593
+ category: "shell",
10594
+ functionalCategory: "overlay",
10595
+ maturity: "stable",
10596
+ keywords: [
10597
+ "sql",
10598
+ "save",
10599
+ "dialog",
10600
+ "saved query"
10601
+ ],
10602
+ description: "쿼리에 이름·설명·공개 여부를 붙여 저장하는 다이얼로그. 편집기에 문장이 여럿이면 어느 문장을 저장할지 넘겨 보며 고릅니다.",
10603
+ slug: "save-query-dialog",
10604
+ exports: ["SaveQueryDialog"],
10605
+ props: { SaveQueryDialog: [
10606
+ {
10607
+ name: "open",
10608
+ type: "boolean",
10609
+ required: true,
10610
+ description: "열림"
10611
+ },
10612
+ {
10613
+ name: "onOpenChange",
10614
+ type: "(open: boolean) => void",
10615
+ required: true,
10616
+ description: "열림 상태 변경"
10617
+ },
10618
+ {
10619
+ name: "onSubmit",
10620
+ type: "(values: SaveQueryValues) => void | Promise<void>",
10621
+ required: true,
10622
+ description: "저장"
10623
+ },
10624
+ {
10625
+ name: "candidates",
10626
+ type: "string[]",
10627
+ required: true,
10628
+ description: "저장할 SQL 후보. 문장이 여럿이면 여러 개"
10629
+ },
10630
+ {
10631
+ name: "initialCandidate",
10632
+ type: "number",
10633
+ default: "0",
10634
+ description: "처음 보여줄 후보"
10635
+ },
10636
+ {
10637
+ name: "candidateIsSelection",
10638
+ type: "boolean",
10639
+ description: "후보가 선택 영역인지"
10640
+ },
10641
+ {
10642
+ name: "initialValues",
10643
+ type: "Partial<Omit<SaveQueryValues, \"sql\">>",
10644
+ description: "기존 저장 쿼리를 수정할 때의 초기값"
10645
+ },
10646
+ {
10647
+ name: "mode",
10648
+ type: "\"create\" | \"update\"",
10649
+ default: "\"create\"",
10650
+ description: "새로 저장 / 수정"
10651
+ },
10652
+ {
10653
+ name: "saving",
10654
+ type: "boolean",
10655
+ description: "저장 중"
10656
+ },
10657
+ {
10658
+ name: "error",
10659
+ type: "string",
10660
+ description: "저장 실패 메시지"
10661
+ },
10662
+ {
10663
+ name: "labels",
10664
+ type: "SaveQueryDialogLabels",
10665
+ description: "문구 오버라이드"
10666
+ }
10667
+ ] },
10668
+ dependencies: [
10669
+ {
10670
+ slug: "dialog",
10671
+ category: "core"
10672
+ },
10673
+ {
10674
+ slug: "input",
10675
+ category: "core"
10676
+ },
10677
+ {
10678
+ slug: "textarea",
10679
+ category: "core"
10680
+ },
10681
+ {
10682
+ slug: "switch",
10683
+ category: "core"
10684
+ }
10685
+ ],
10686
+ ariaRole: "dialog",
10687
+ testDescribe: "SaveQueryDialog"
10688
+ },
10689
+ {
10690
+ name: "QueryWorkspace",
10691
+ category: "shell",
10692
+ functionalCategory: "layout",
10693
+ maturity: "stable",
10694
+ keywords: [
10695
+ "sql",
10696
+ "workspace",
10697
+ "layout",
10698
+ "resizable",
10699
+ "sidebar"
10700
+ ],
10701
+ description: "스키마·편집기·출력의 3-pane 쿼리 워크스페이스. 패널은 리사이즈되고 사이드바는 접히며, storageKey로 레이아웃을 기억합니다. 툴바·편집기·출력은 슬롯입니다.",
10702
+ slug: "query-workspace",
10703
+ exports: ["QueryWorkspace"],
10704
+ props: { QueryWorkspace: [
10705
+ {
10706
+ name: "sidebar",
10707
+ type: "ReactNode",
10708
+ description: "왼쪽 패널 내용"
10709
+ },
10710
+ {
10711
+ name: "sidebarOpen",
10712
+ type: "boolean",
10713
+ description: "제어형 사이드바 열림"
10714
+ },
10715
+ {
10716
+ name: "onSidebarOpenChange",
10717
+ type: "(open: boolean) => void",
10718
+ description: "사이드바 열림 변경"
10719
+ },
10720
+ {
10721
+ name: "header",
10722
+ type: "ReactNode",
10723
+ description: "툴바 위 — 탭이나 페이지 헤더"
10724
+ },
10725
+ {
10726
+ name: "toolbar",
10727
+ type: "ReactNode",
10728
+ description: "툴바"
10729
+ },
10730
+ {
10731
+ name: "editor",
10732
+ type: "ReactNode",
10733
+ required: true,
10734
+ description: "편집기"
10735
+ },
10736
+ {
10737
+ name: "output",
10738
+ type: "ReactNode",
10739
+ required: true,
10740
+ description: "출력"
10741
+ },
10742
+ {
10743
+ name: "storageKey",
10744
+ type: "string",
10745
+ description: "패널 크기를 localStorage에 기억할 키"
10746
+ },
10747
+ {
10748
+ name: "defaultSidebarSize",
10749
+ type: "number",
10750
+ default: "22",
10751
+ description: "사이드바 폭(%)"
10752
+ },
10753
+ {
10754
+ name: "defaultEditorSize",
10755
+ type: "number",
10756
+ default: "40",
10757
+ description: "편집기 높이(%)"
10758
+ },
10759
+ {
10760
+ name: "labels",
10761
+ type: "QueryWorkspaceLabels",
10762
+ description: "문구 오버라이드"
10763
+ }
10764
+ ] },
10765
+ dependencies: [{
10766
+ slug: "resizable",
10767
+ category: "core"
10768
+ }, {
10769
+ slug: "button",
10770
+ category: "core"
10771
+ }],
10772
+ testDescribe: "QueryWorkspace"
9884
10773
  }
9885
10774
  ];
9886
10775
  //#endregion