@underdogai/mesh-event-schemas 0.1.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/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/apppacks.d.ts +15652 -0
- package/dist/apppacks.d.ts.map +1 -0
- package/dist/apppacks.js +71 -0
- package/dist/apppacks.js.map +1 -0
- package/dist/blocks.d.ts +2320 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +472 -0
- package/dist/blocks.js.map +1 -0
- package/dist/capabilities.d.ts +35 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +37 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/events.d.ts +4557 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +571 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/namespace.d.ts +56 -0
- package/dist/namespace.d.ts.map +1 -0
- package/dist/namespace.js +60 -0
- package/dist/namespace.js.map +1 -0
- package/dist/plugins.d.ts +131 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +66 -0
- package/dist/plugins.js.map +1 -0
- package/dist/registry.d.ts +67 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +212 -0
- package/dist/registry.js.map +1 -0
- package/dist/surfaces.d.ts +54323 -0
- package/dist/surfaces.d.ts.map +1 -0
- package/dist/surfaces.js +523 -0
- package/dist/surfaces.js.map +1 -0
- package/dist/templates.d.ts +390 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +493 -0
- package/dist/templates.js.map +1 -0
- package/package.json +50 -0
- package/src/apppacks.ts +90 -0
- package/src/blocks.ts +544 -0
- package/src/capabilities.ts +58 -0
- package/src/events.ts +758 -0
- package/src/index.ts +15 -0
- package/src/namespace.ts +64 -0
- package/src/plugins.ts +118 -0
- package/src/registry.ts +261 -0
- package/src/surfaces.ts +610 -0
- package/src/templates.ts +736 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"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"}
|
package/dist/blocks.js
ADDED
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Blocks — 채팅 타임라인에 인라인 렌더되는 선언적 UI 스키마.
|
|
3
|
+
*
|
|
4
|
+
* 설계 원칙 (docs/custom-event-ui.md 참조):
|
|
5
|
+
* - 닫힌(화이트리스트) 컴포넌트 집합. 임의 HTML/코드 실행 없음.
|
|
6
|
+
* - 순수 데이터(JSON). 렌더는 @chatops/ui-blocks(React)가 담당.
|
|
7
|
+
* - 알 수 없는 블록 타입은 클라이언트가 안전한 fallback으로 렌더.
|
|
8
|
+
* - 권한은 절대 클라이언트가 아니라 appservice(서버측)가 재검증한다. 여기 disabled/confirm은 UX일 뿐.
|
|
9
|
+
*
|
|
10
|
+
* A2UI를 쓰지 않는 대신 우리가 통제하는 이 스키마를 쓴다. 향후 A2UI로 교체 시,
|
|
11
|
+
* 이벤트 타입(org.corp.ui.card)은 그대로 두고 payload만 바꿔 렌더러를 갈아끼운다.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
export const ToneSchema = z.enum(["neutral", "success", "warning", "danger", "info"]);
|
|
15
|
+
export const ButtonStyleSchema = z.enum(["default", "primary", "danger"]);
|
|
16
|
+
/** 파괴적 액션 전에 클라이언트가 띄우는 확인 다이얼로그. 서버도 별도로 HITL 재검증한다. */
|
|
17
|
+
export const ConfirmSchema = z.object({
|
|
18
|
+
title: z.string(),
|
|
19
|
+
text: z.string(),
|
|
20
|
+
ok: z.string().optional(),
|
|
21
|
+
cancel: z.string().optional(),
|
|
22
|
+
});
|
|
23
|
+
// --- 표시용 블록 (비대화형) ---
|
|
24
|
+
export const TextBlockSchema = z.object({
|
|
25
|
+
type: z.literal("text"),
|
|
26
|
+
text: z.string(),
|
|
27
|
+
/** true면 안전 화이트리스트 마크다운으로 렌더 (raw HTML 금지) */
|
|
28
|
+
markdown: z.boolean().optional(),
|
|
29
|
+
});
|
|
30
|
+
export const HeadingBlockSchema = z.object({
|
|
31
|
+
type: z.literal("heading"),
|
|
32
|
+
text: z.string(),
|
|
33
|
+
level: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional(),
|
|
34
|
+
});
|
|
35
|
+
export const DividerBlockSchema = z.object({
|
|
36
|
+
type: z.literal("divider"),
|
|
37
|
+
});
|
|
38
|
+
export const FieldsBlockSchema = z.object({
|
|
39
|
+
type: z.literal("fields"),
|
|
40
|
+
items: z
|
|
41
|
+
.object({
|
|
42
|
+
label: z.string(),
|
|
43
|
+
value: z.string(),
|
|
44
|
+
/** true면 2열 그리드에 좁게 배치 */
|
|
45
|
+
short: z.boolean().optional(),
|
|
46
|
+
})
|
|
47
|
+
.array(),
|
|
48
|
+
});
|
|
49
|
+
export const ImageBlockSchema = z.object({
|
|
50
|
+
type: z.literal("image"),
|
|
51
|
+
/** https URL 또는 mxc:// (둘 중 하나 권장). 클라이언트가 출처를 검증한다. */
|
|
52
|
+
url: z.string().optional(),
|
|
53
|
+
mxc: z.string().optional(),
|
|
54
|
+
alt: z.string().optional(),
|
|
55
|
+
});
|
|
56
|
+
export const ContextBlockSchema = z.object({
|
|
57
|
+
type: z.literal("context"),
|
|
58
|
+
/** 작은 보조 텍스트/아이콘 줄 */
|
|
59
|
+
elements: z
|
|
60
|
+
.union([z.string(), z.object({ icon: z.string() }), z.object({ mxc: z.string() })])
|
|
61
|
+
.array(),
|
|
62
|
+
});
|
|
63
|
+
export const BadgeBlockSchema = z.object({
|
|
64
|
+
type: z.literal("badge"),
|
|
65
|
+
text: z.string(),
|
|
66
|
+
tone: ToneSchema.optional(),
|
|
67
|
+
});
|
|
68
|
+
export const TableBlockSchema = z.object({
|
|
69
|
+
type: z.literal("table"),
|
|
70
|
+
columns: z.string().array(),
|
|
71
|
+
rows: z.string().array().array(),
|
|
72
|
+
});
|
|
73
|
+
// --- 입력용 블록 (대화형, name으로 폼 값에 수집됨) ---
|
|
74
|
+
export const InputBlockSchema = z.object({
|
|
75
|
+
type: z.literal("input"),
|
|
76
|
+
name: z.string().min(1),
|
|
77
|
+
/** date=날짜, datetime=날짜+시각(네이티브 datetime-local), time=시각만 — 모두 네이티브 피커로 렌더. */
|
|
78
|
+
input: z.enum(["text", "textarea", "number", "date", "datetime", "time"]).optional(),
|
|
79
|
+
label: z.string().optional(),
|
|
80
|
+
placeholder: z.string().optional(),
|
|
81
|
+
required: z.boolean().optional(),
|
|
82
|
+
value: z.string().optional(),
|
|
83
|
+
});
|
|
84
|
+
/** 토글(스위치) — checkbox 와 같은 불리언을 수집하되 on/off 스위치 어포던스로 렌더. */
|
|
85
|
+
export const ToggleBlockSchema = z.object({
|
|
86
|
+
type: z.literal("toggle"),
|
|
87
|
+
name: z.string().min(1),
|
|
88
|
+
label: z.string(),
|
|
89
|
+
checked: z.boolean().optional(),
|
|
90
|
+
/** 켜짐/꺼짐 보조 라벨(선택) — 스위치 옆 상태 텍스트. 색-only 회피용으로도 권장. */
|
|
91
|
+
onText: z.string().optional(),
|
|
92
|
+
offText: z.string().optional(),
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* 슬라이더(범위 입력) — min~max 사이 정수 한 값을 끌어서 고른다. 값은 name 으로 폼에 number 로 수집.
|
|
96
|
+
* 와이어 canonical JSON 은 소수 금지 → min/max/step/value 모두 정수 강제(정도/임계/배분 등).
|
|
97
|
+
*/
|
|
98
|
+
export const SliderBlockSchema = z.object({
|
|
99
|
+
type: z.literal("slider"),
|
|
100
|
+
name: z.string().min(1),
|
|
101
|
+
label: z.string().optional(),
|
|
102
|
+
/** 하한(기본 0). */
|
|
103
|
+
min: z.number().int().optional(),
|
|
104
|
+
/** 상한(기본 100). */
|
|
105
|
+
max: z.number().int().optional(),
|
|
106
|
+
/** 증감 단위(기본 1). */
|
|
107
|
+
step: z.number().int().positive().optional(),
|
|
108
|
+
value: z.number().int().optional(),
|
|
109
|
+
/** 현재값 옆 접미(예: "%", "건"). */
|
|
110
|
+
unit: z.string().optional(),
|
|
111
|
+
});
|
|
112
|
+
/** 단일 선택 라디오 그룹. select 와 달리 옵션이 펼쳐져 보인다. */
|
|
113
|
+
export const RadioBlockSchema = z.object({
|
|
114
|
+
type: z.literal("radio"),
|
|
115
|
+
name: z.string().min(1),
|
|
116
|
+
label: z.string().optional(),
|
|
117
|
+
options: z.object({ value: z.string(), label: z.string() }).array(),
|
|
118
|
+
value: z.string().optional(),
|
|
119
|
+
});
|
|
120
|
+
export const SelectBlockSchema = z.object({
|
|
121
|
+
type: z.literal("select"),
|
|
122
|
+
name: z.string().min(1),
|
|
123
|
+
label: z.string().optional(),
|
|
124
|
+
placeholder: z.string().optional(),
|
|
125
|
+
options: z.object({ value: z.string(), label: z.string() }).array(),
|
|
126
|
+
value: z.string().optional(),
|
|
127
|
+
multi: z.boolean().optional(),
|
|
128
|
+
});
|
|
129
|
+
export const CheckboxBlockSchema = z.object({
|
|
130
|
+
type: z.literal("checkbox"),
|
|
131
|
+
name: z.string().min(1),
|
|
132
|
+
label: z.string(),
|
|
133
|
+
checked: z.boolean().optional(),
|
|
134
|
+
});
|
|
135
|
+
// --- 버튼 / 액션 행 ---
|
|
136
|
+
export const ButtonBlockSchema = z.object({
|
|
137
|
+
type: z.literal("button"),
|
|
138
|
+
/** 어떤 액션인지 식별. 클릭 시 org.corp.ui.action.action_id 로 회신됨. */
|
|
139
|
+
action_id: z.string().min(1),
|
|
140
|
+
text: z.string(),
|
|
141
|
+
style: ButtonStyleSchema.optional(),
|
|
142
|
+
/** 버튼 고유 페이로드 (폼 값과 별개로 함께 전송) */
|
|
143
|
+
value: z.string().optional(),
|
|
144
|
+
confirm: ConfirmSchema.optional(),
|
|
145
|
+
disabled: z.boolean().optional(),
|
|
146
|
+
});
|
|
147
|
+
/**
|
|
148
|
+
* 링크 버튼 — action_id 로 회신하는 button 과 달리, https URL 로 이동만 한다(서버 왕복 없음).
|
|
149
|
+
* "Approve"(button, 액션) 옆에 "View PR"(linkButton, 이동)을 같은 줄에 두는 식. 출처는 클라가 검증.
|
|
150
|
+
*/
|
|
151
|
+
export const LinkButtonBlockSchema = z.object({
|
|
152
|
+
type: z.literal("linkButton"),
|
|
153
|
+
text: z.string(),
|
|
154
|
+
/** 이동할 https URL. 클라이언트가 출처를 검증(아니면 비활성 표시). */
|
|
155
|
+
url: z.string(),
|
|
156
|
+
style: ButtonStyleSchema.optional(),
|
|
157
|
+
/** 새 탭으로 열기(기본 true). */
|
|
158
|
+
external: z.boolean().optional(),
|
|
159
|
+
});
|
|
160
|
+
/** 버튼 한 줄 묶음 — 액션 버튼(button)과 링크 버튼(linkButton)을 섞어 배치 가능. */
|
|
161
|
+
export const ActionsBlockSchema = z.object({
|
|
162
|
+
type: z.literal("actions"),
|
|
163
|
+
elements: z.union([ButtonBlockSchema, LinkButtonBlockSchema]).array(),
|
|
164
|
+
});
|
|
165
|
+
/**
|
|
166
|
+
* 오버플로 메뉴 — "⋯" 트리거를 누르면 액션 항목 목록이 팝오버로 열린다(공간 절약형 액션 묶음).
|
|
167
|
+
* 각 항목은 button 과 동일하게 action_id 로 회신하고 confirm(파괴적 액션 확인)도 지원.
|
|
168
|
+
* 권한은 항상 서버가 재검증 — disabled/confirm 은 UX 일 뿐(button 과 동일 자세).
|
|
169
|
+
*/
|
|
170
|
+
export const OverflowBlockSchema = z.object({
|
|
171
|
+
type: z.literal("overflow"),
|
|
172
|
+
/** 트리거 접근성 라벨(기본 "More actions"). */
|
|
173
|
+
label: z.string().optional(),
|
|
174
|
+
items: z
|
|
175
|
+
.object({
|
|
176
|
+
action_id: z.string().min(1),
|
|
177
|
+
text: z.string(),
|
|
178
|
+
value: z.string().optional(),
|
|
179
|
+
/** danger 항목 강조(삭제 등). */
|
|
180
|
+
tone: ToneSchema.optional(),
|
|
181
|
+
confirm: ConfirmSchema.optional(),
|
|
182
|
+
disabled: z.boolean().optional(),
|
|
183
|
+
})
|
|
184
|
+
.array()
|
|
185
|
+
.min(1),
|
|
186
|
+
});
|
|
187
|
+
// --- 진행/상태 표시용 블록 (비대화형) ---
|
|
188
|
+
/** 진행률 바 (0~100). 에이전트가 m.replace 편집으로 갱신해 "스트리밍" 진행 표시 가능. */
|
|
189
|
+
export const ProgressBlockSchema = z.object({
|
|
190
|
+
type: z.literal("progress"),
|
|
191
|
+
/** 0~100 백분율(정수). 생략하면 indeterminate(불확정) 표시. 와이어 canonical JSON 은 소수 금지 → int 강제. */
|
|
192
|
+
value: z.number().int().min(0).max(100).optional(),
|
|
193
|
+
label: z.string().optional(),
|
|
194
|
+
tone: ToneSchema.optional(),
|
|
195
|
+
});
|
|
196
|
+
/** 멀티스텝 진행 상태 표시(타임라인). 폼 마법사와 별개로, 작업 단계 시각화에 쓴다. */
|
|
197
|
+
export const StepsBlockSchema = z.object({
|
|
198
|
+
type: z.literal("steps"),
|
|
199
|
+
items: z
|
|
200
|
+
.object({
|
|
201
|
+
label: z.string(),
|
|
202
|
+
status: z.enum(["done", "active", "todo", "error"]).optional(),
|
|
203
|
+
note: z.string().optional(),
|
|
204
|
+
})
|
|
205
|
+
.array(),
|
|
206
|
+
});
|
|
207
|
+
/** 코드/JSON 표시 블록 (읽기 전용, 안전하게 escape 되어 렌더). */
|
|
208
|
+
export const CodeBlockSchema = z.object({
|
|
209
|
+
type: z.literal("code"),
|
|
210
|
+
code: z.string(),
|
|
211
|
+
language: z.string().optional(),
|
|
212
|
+
});
|
|
213
|
+
/**
|
|
214
|
+
* 코드 diff 블록 — unified patch(통합 diff) 텍스트를 줄 단위(추가/삭제/hunk/문맥)로 색칠해 표시.
|
|
215
|
+
* 입력은 SCM API 가 주는 그대로의 patch 문자열이고, 렌더러가 줄 첫 글자로 분류한다(표시 전용, escape,
|
|
216
|
+
* 임의 코드/HTML 없음 — code 블록과 같은 닫힌 자세). PR 리뷰처럼 "무엇이 바뀌었나"를 인라인으로 보여줄 때.
|
|
217
|
+
* 권위 데이터(전체 diff)는 url 로 재조회 — 여기 patch 는 리뷰용 표시 스냅샷이다.
|
|
218
|
+
*/
|
|
219
|
+
export const DiffBlockSchema = z.object({
|
|
220
|
+
type: z.literal("diff"),
|
|
221
|
+
/** 파일 경로/제목(헤더에 표시). */
|
|
222
|
+
filename: z.string().optional(),
|
|
223
|
+
/** unified diff(patch) 텍스트. 렌더러가 줄별로 +(add)/-(del)/@@(hunk)/그 외(context)로 분류. */
|
|
224
|
+
patch: z.string(),
|
|
225
|
+
/** 변경 통계(선택) — 헤더에 +N / -M 으로 표시. */
|
|
226
|
+
additions: z.number().int().nonnegative().optional(),
|
|
227
|
+
deletions: z.number().int().nonnegative().optional(),
|
|
228
|
+
});
|
|
229
|
+
/**
|
|
230
|
+
* 파일/첨부 블록 — 단일 첨부(문서·이미지·아카이브)를 이름·크기·종류·다운로드로 표시.
|
|
231
|
+
* image 블록이 "본문에 펼쳐 보이는 그림"이라면, file 은 "다운로드 가능한 첨부 타일"이다(승인/재무/문서 흐름).
|
|
232
|
+
* url(https) 있으면 다운로드 링크, 없으면 정보 타일. mxc 는 인증 미디어(호스트 해석) — 출처는 클라가 검증.
|
|
233
|
+
*/
|
|
234
|
+
export const FileBlockSchema = z.object({
|
|
235
|
+
type: z.literal("file"),
|
|
236
|
+
/** 파일명(표시). */
|
|
237
|
+
name: z.string(),
|
|
238
|
+
/** 바이트 크기(선택) — 렌더러가 KB/MB 로 표시. */
|
|
239
|
+
size: z.number().int().nonnegative().optional(),
|
|
240
|
+
/** MIME 또는 확장자 힌트(아이콘/라벨). 예: "application/pdf", "png". */
|
|
241
|
+
mime: z.string().optional(),
|
|
242
|
+
/** 다운로드 https URL(선택). 출처는 클라가 검증. */
|
|
243
|
+
url: z.string().optional(),
|
|
244
|
+
/** mxc:// (선택) — 인증 미디어. 호스트가 해석. */
|
|
245
|
+
mxc: z.string().optional(),
|
|
246
|
+
/** 보조 설명(선택). */
|
|
247
|
+
caption: z.string().optional(),
|
|
248
|
+
});
|
|
249
|
+
/**
|
|
250
|
+
* 단일 지표(KPI) 블록 — 임팩트/공정률을 1급으로 표시.
|
|
251
|
+
* value(현재) + 선택 target(기준/목표)·delta(증감)·tone. "현재 / 목표 + 델타" 형태로 렌더.
|
|
252
|
+
*/
|
|
253
|
+
export const MetricBlockSchema = z.object({
|
|
254
|
+
type: z.literal("metric"),
|
|
255
|
+
label: z.string(),
|
|
256
|
+
value: z.string(),
|
|
257
|
+
/** 기준/목표값 (선택) — value 와 함께 "현재 / 목표"로 표시 */
|
|
258
|
+
target: z.string().optional(),
|
|
259
|
+
/** 증감 표시 (예: "+12") */
|
|
260
|
+
delta: z.string().optional(),
|
|
261
|
+
tone: ToneSchema.optional(),
|
|
262
|
+
});
|
|
263
|
+
/**
|
|
264
|
+
* 차트 블록 — 인라인 데이터 시각화(스파크라인/막대/꺾은선/도넛).
|
|
265
|
+
* 정적 SVG 로 렌더(임의 JS·HTML 없음, 닫힌 집합). data[] 는 값 묶음이고 variant 가 모양을 정한다.
|
|
266
|
+
* 무거운/인터랙티브 차트(대시보드·BI)는 여전히 widget 탈출구를 쓴다 — 이건 "가벼운 1급 시각화".
|
|
267
|
+
*/
|
|
268
|
+
export const ChartBlockSchema = z.object({
|
|
269
|
+
type: z.literal("chart"),
|
|
270
|
+
variant: z.enum(["sparkline", "bar", "line", "donut"]),
|
|
271
|
+
/** 데이터 포인트. sparkline/line 은 순서대로 잇고, bar/donut 은 각 항목이 막대/조각이 된다. */
|
|
272
|
+
data: z
|
|
273
|
+
.object({ label: z.string().optional(), value: z.number(), tone: ToneSchema.optional() })
|
|
274
|
+
.array()
|
|
275
|
+
.min(1),
|
|
276
|
+
/** 접근성/표시용 캡션(차트 제목). */
|
|
277
|
+
caption: z.string().optional(),
|
|
278
|
+
/** bar/sparkline/line 스케일 상한(생략 시 데이터 최대값). donut 은 합계 기준이라 무시. */
|
|
279
|
+
max: z.number().positive().optional(),
|
|
280
|
+
/** 값 단위(예: "%", "건") — 표시 보조. */
|
|
281
|
+
unit: z.string().optional(),
|
|
282
|
+
});
|
|
283
|
+
/** 아바타 1명의 최소 정보 — avatarGroup 의 people 원소. */
|
|
284
|
+
const AvatarPersonSchema = z.object({
|
|
285
|
+
name: z.string(),
|
|
286
|
+
/** 이니셜(미지정 시 name 에서 자동 생성). */
|
|
287
|
+
initials: z.string().optional(),
|
|
288
|
+
/** 배경색(CSS 색/토큰). 미지정 시 name 해시로 팔레트에서 고름. */
|
|
289
|
+
color: z.string().optional(),
|
|
290
|
+
/** 이미지 URL(https). 있으면 이미지, 없으면 이니셜. */
|
|
291
|
+
src: z.string().optional(),
|
|
292
|
+
});
|
|
293
|
+
/** 단일 아바타 — 얼굴 동그라미(이미지/이니셜) + 이름·보조텍스트 + 상태점. 담당자 표시. */
|
|
294
|
+
export const AvatarBlockSchema = z.object({
|
|
295
|
+
type: z.literal("avatar"),
|
|
296
|
+
name: z.string(),
|
|
297
|
+
initials: z.string().optional(),
|
|
298
|
+
color: z.string().optional(),
|
|
299
|
+
src: z.string().optional(),
|
|
300
|
+
subtitle: z.string().optional(),
|
|
301
|
+
status: z.enum(["online", "away", "busy", "offline"]).optional(),
|
|
302
|
+
});
|
|
303
|
+
/** 아바타 묶음 — 겹쳐 쌓고 max 초과분은 +N. 리뷰어·참여자 표시. */
|
|
304
|
+
export const AvatarGroupBlockSchema = z.object({
|
|
305
|
+
type: z.literal("avatarGroup"),
|
|
306
|
+
people: AvatarPersonSchema.array().min(1),
|
|
307
|
+
/** 앞에서 몇 명까지 보일지(기본 5). 나머지는 +N. */
|
|
308
|
+
max: z.number().int().positive().optional(),
|
|
309
|
+
label: z.string().optional(),
|
|
310
|
+
});
|
|
311
|
+
/** 게이지 — 점수·리스크를 반원 아크로(0~max). 중앙에 값. */
|
|
312
|
+
export const GaugeBlockSchema = z.object({
|
|
313
|
+
type: z.literal("gauge"),
|
|
314
|
+
value: z.number(),
|
|
315
|
+
/** 스케일 상한(기본 100). */
|
|
316
|
+
max: z.number().optional(),
|
|
317
|
+
/** 스케일 하한(기본 0). */
|
|
318
|
+
min: z.number().optional(),
|
|
319
|
+
label: z.string().optional(),
|
|
320
|
+
/** 중앙 값 접미(예: "%", "점"). */
|
|
321
|
+
unit: z.string().optional(),
|
|
322
|
+
tone: ToneSchema.optional(),
|
|
323
|
+
});
|
|
324
|
+
/** 별점 — value/max 를 심볼(★/●)로. 정확값은 숫자로 병기. */
|
|
325
|
+
export const RatingBlockSchema = z.object({
|
|
326
|
+
type: z.literal("rating"),
|
|
327
|
+
value: z.number().min(0),
|
|
328
|
+
/** 만점(기본 5). */
|
|
329
|
+
max: z.number().int().positive().optional(),
|
|
330
|
+
label: z.string().optional(),
|
|
331
|
+
/** 심볼 모양(기본 star). */
|
|
332
|
+
symbol: z.enum(["star", "dot"]).optional(),
|
|
333
|
+
});
|
|
334
|
+
/** 콜아웃 — 톤 강조 박스(정보/경고/위험 등). 선택 제목 + 본문 + 아이콘. */
|
|
335
|
+
export const CalloutBlockSchema = z.object({
|
|
336
|
+
type: z.literal("callout"),
|
|
337
|
+
text: z.string(),
|
|
338
|
+
title: z.string().optional(),
|
|
339
|
+
tone: ToneSchema.optional(),
|
|
340
|
+
/** 아이콘 글리프(이모지/문자). 미지정 시 tone 기본 아이콘. */
|
|
341
|
+
icon: z.string().optional(),
|
|
342
|
+
});
|
|
343
|
+
/** 엔티티 참조 칩 — 엔티티(송장·리드·repo…)로의 라벨/링크 칩. url 있으면 링크. */
|
|
344
|
+
export const EntityRefBlockSchema = z.object({
|
|
345
|
+
type: z.literal("entityRef"),
|
|
346
|
+
label: z.string(),
|
|
347
|
+
/** 엔티티 종류(예: "invoice","lead","repo") — 작은 종류 태그. */
|
|
348
|
+
entity: z.string().optional(),
|
|
349
|
+
/** 클릭 시 이동할 https URL(있으면 링크, 출처는 클라가 검증). */
|
|
350
|
+
url: z.string().optional(),
|
|
351
|
+
tone: ToneSchema.optional(),
|
|
352
|
+
});
|
|
353
|
+
/**
|
|
354
|
+
* 칸반 보드 — 정적 표시 블록(닫힌 유니온). 컬럼(상태/스테이지)별 카드 묶음.
|
|
355
|
+
* 선택/드래그/클릭 액션 없음(표시 전용 — 인터랙션은 후속/위젯). 보드(컬럼+카드)는 템플릿 조합으로
|
|
356
|
+
* 표현 불가 → 코어 블록 프리미티브가 정당(P4-2). 어떤 도메인의 보드든 범용으로 쓴다.
|
|
357
|
+
*/
|
|
358
|
+
export const KanbanBlockSchema = z.object({
|
|
359
|
+
type: z.literal("kanban"),
|
|
360
|
+
columns: z
|
|
361
|
+
.object({
|
|
362
|
+
id: z.string(),
|
|
363
|
+
title: z.string(),
|
|
364
|
+
tone: ToneSchema.optional(),
|
|
365
|
+
cards: z
|
|
366
|
+
.object({
|
|
367
|
+
id: z.string(),
|
|
368
|
+
title: z.string(),
|
|
369
|
+
tone: ToneSchema.optional(),
|
|
370
|
+
/** 보조행(라벨/담당 등) — 카드 제목 아래 표시. */
|
|
371
|
+
meta: z.string().array().optional(),
|
|
372
|
+
badge: z.object({ label: z.string(), tone: ToneSchema.optional() }).optional(),
|
|
373
|
+
})
|
|
374
|
+
.array(),
|
|
375
|
+
})
|
|
376
|
+
.array()
|
|
377
|
+
.min(1),
|
|
378
|
+
caption: z.string().optional(),
|
|
379
|
+
});
|
|
380
|
+
/**
|
|
381
|
+
* 카운트다운 — 마감 타임스탬프까지 남은 시간을 라이브로 보여주는 표시 블록(닫힌 유니온).
|
|
382
|
+
* 값(target ISO 타임스탬프)은 정적 데이터지만 렌더러가 매초 남은 시간을 계산·갱신("라이브 틱") →
|
|
383
|
+
* 정적 metric("resolve by HH:MM")으로 표현 불가하므로 블록이 정당(P4-3). SLA/SLO 위반까지 남은 시간 등.
|
|
384
|
+
*/
|
|
385
|
+
export const CountdownBlockSchema = z.object({
|
|
386
|
+
type: z.literal("countdown"),
|
|
387
|
+
/** 마감 시각(ISO 8601 타임스탬프 문자열) — 렌더러가 new Date 로 파싱해 남은 시간을 계산. */
|
|
388
|
+
target: z.string().min(1),
|
|
389
|
+
label: z.string().optional(),
|
|
390
|
+
tone: ToneSchema.optional(),
|
|
391
|
+
/** 마감 경과 후 표시할 텍스트(기본 "Overdue"). */
|
|
392
|
+
expiredText: z.string().optional(),
|
|
393
|
+
});
|
|
394
|
+
/**
|
|
395
|
+
* 접기/펼치기(disclosure) — 요약(title)만 보이다가 펼치면 중첩 블록을 드러낸다(native details/summary).
|
|
396
|
+
* 긴 보조 정보(로그·상세 필드·부가 첨부)를 카드 높이를 잡아먹지 않게 접어두는 레이아웃 블록.
|
|
397
|
+
* blocks 는 어떤 블록이든 중첩 가능 — 렌더러가 BlockList 로 재귀 렌더(닫힌 유니온 유지).
|
|
398
|
+
*/
|
|
399
|
+
export const CollapsibleBlockSchema = z.object({
|
|
400
|
+
type: z.literal("collapsible"),
|
|
401
|
+
/** 접힌 상태에서도 보이는 요약 헤더. */
|
|
402
|
+
title: z.string(),
|
|
403
|
+
/** 처음부터 펼쳐둘지(기본 접힘). */
|
|
404
|
+
open: z.boolean().optional(),
|
|
405
|
+
tone: ToneSchema.optional(),
|
|
406
|
+
/**
|
|
407
|
+
* 펼치면 보이는 중첩 블록(재귀). 런타임은 z.lazy 로 BlockSchema 를 지연 참조해 재귀 검증하지만,
|
|
408
|
+
* 정적 타입은 z.ZodTypeAny 로 끊는다 — Block 이 z.infer 기반이라 재귀 타입 별칭이 conditional type
|
|
409
|
+
* 순환(TS2456)에 걸리기 때문. 작성자용 정확 타입은 아래 export 한 CollapsibleBlock 을 쓴다.
|
|
410
|
+
*/
|
|
411
|
+
blocks: z.array(z.lazy(() => BlockSchema)),
|
|
412
|
+
});
|
|
413
|
+
/**
|
|
414
|
+
* 탈출구(escape hatch): A2UI/UI Blocks로 표현하기 어려운 무거운 UI(차트·대형 그리드·지도)는
|
|
415
|
+
* Matrix Widget으로. 클라이언트가 신뢰 경계 안에서 sandboxed iframe으로 렌더한다.
|
|
416
|
+
* url 은 클라이언트가 허용 출처를 검증해야 한다(RFC §D4 위젯).
|
|
417
|
+
*/
|
|
418
|
+
export const WidgetBlockSchema = z.object({
|
|
419
|
+
type: z.literal("widget"),
|
|
420
|
+
url: z.string(),
|
|
421
|
+
name: z.string().optional(),
|
|
422
|
+
/** 위젯 인스턴스 식별자 (브리지 라우팅용) */
|
|
423
|
+
widget_id: z.string().optional(),
|
|
424
|
+
/** 호스트가 이 위젯에 부여하는 capability scope (최소권한). 예: ["action.send"] */
|
|
425
|
+
capabilities: z.string().array().optional(),
|
|
426
|
+
/** 렌더 높이(px). 기본은 클라이언트가 정함. */
|
|
427
|
+
height: z.number().int().positive().optional(),
|
|
428
|
+
});
|
|
429
|
+
/** 모든 블록의 판별 유니온. 새 블록을 추가하면 여기에만 등록하면 된다. */
|
|
430
|
+
export const BlockSchema = z.discriminatedUnion("type", [
|
|
431
|
+
TextBlockSchema,
|
|
432
|
+
HeadingBlockSchema,
|
|
433
|
+
DividerBlockSchema,
|
|
434
|
+
FieldsBlockSchema,
|
|
435
|
+
ImageBlockSchema,
|
|
436
|
+
ContextBlockSchema,
|
|
437
|
+
BadgeBlockSchema,
|
|
438
|
+
TableBlockSchema,
|
|
439
|
+
ProgressBlockSchema,
|
|
440
|
+
StepsBlockSchema,
|
|
441
|
+
MetricBlockSchema,
|
|
442
|
+
ChartBlockSchema,
|
|
443
|
+
AvatarBlockSchema,
|
|
444
|
+
AvatarGroupBlockSchema,
|
|
445
|
+
GaugeBlockSchema,
|
|
446
|
+
RatingBlockSchema,
|
|
447
|
+
CalloutBlockSchema,
|
|
448
|
+
EntityRefBlockSchema,
|
|
449
|
+
KanbanBlockSchema,
|
|
450
|
+
CountdownBlockSchema,
|
|
451
|
+
CodeBlockSchema,
|
|
452
|
+
DiffBlockSchema,
|
|
453
|
+
FileBlockSchema,
|
|
454
|
+
CollapsibleBlockSchema,
|
|
455
|
+
WidgetBlockSchema,
|
|
456
|
+
InputBlockSchema,
|
|
457
|
+
ToggleBlockSchema,
|
|
458
|
+
SliderBlockSchema,
|
|
459
|
+
RadioBlockSchema,
|
|
460
|
+
SelectBlockSchema,
|
|
461
|
+
CheckboxBlockSchema,
|
|
462
|
+
ButtonBlockSchema,
|
|
463
|
+
LinkButtonBlockSchema,
|
|
464
|
+
ActionsBlockSchema,
|
|
465
|
+
OverflowBlockSchema,
|
|
466
|
+
]);
|
|
467
|
+
const INPUT_BLOCK_TYPES = new Set(["input", "radio", "select", "checkbox", "toggle", "slider"]);
|
|
468
|
+
/** 해당 블록이 사용자 입력을 수집하는(name을 가진) 블록인지 */
|
|
469
|
+
export function isInputBlock(block) {
|
|
470
|
+
return INPUT_BLOCK_TYPES.has(block.type);
|
|
471
|
+
}
|
|
472
|
+
//# sourceMappingURL=blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAGtF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAG1E,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAGH,wBAAwB;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,8CAA8C;IAC9C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,0BAA0B;QAC1B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC;SACD,KAAK,EAAE;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,wDAAwD;IACxD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,sBAAsB;IACtB,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;SAClF,KAAK,EAAE;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE;CACjC,CAAC,CAAC;AAEH,wCAAwC;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,+EAA+E;IAC/E,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,wDAAwD;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,gBAAgB;IAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,kBAAkB;IAClB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,mBAAmB;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,6BAA6B;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE;IACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE;IACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAEH,oBAAoB;AAEpB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,2DAA2D;IAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACnC,kCAAkC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAGH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,gDAAgD;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACnC,yBAAyB;IACzB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAGH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,EAAE;CACtE,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,qCAAqC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,0BAA0B;QAC1B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC3B,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC;SACD,KAAK,EAAE;SACP,GAAG,CAAC,CAAC,CAAC;CACV,CAAC,CAAC;AAGH,8BAA8B;AAE9B,+DAA+D;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,sFAAsF;IACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC;SACD,KAAK,EAAE;CACX,CAAC,CAAC;AAEH,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,wBAAwB;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,iFAAiF;IACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,qCAAqC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,eAAe;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,oCAAoC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC/C,2DAA2D;IAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,sCAAsC;IACtC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,qCAAqC;IACrC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,iBAAiB;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,6CAA6C;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,uBAAuB;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,sEAAsE;IACtE,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;SACxF,KAAK,EAAE;SACP,GAAG,CAAC,CAAC,CAAC;IACT,yBAAyB;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,mEAAmE;IACnE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACrC,iCAAiC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH,+CAA+C;AAC/C,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,gCAAgC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,8CAA8C;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,wCAAwC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;CACjE,CAAC,CAAC;AAGH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,MAAM,EAAE,kBAAkB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,oCAAoC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAGH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,sBAAsB;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,oBAAoB;IACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,4BAA4B;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,gBAAgB;IAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,sBAAsB;IACtB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAGH,mDAAmD;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,qDAAqD;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,8CAA8C;IAC9C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC3B,KAAK,EAAE,CAAC;aACL,MAAM,CAAC;YACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;YACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;YAC3B,kCAAkC;YAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;YACnC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC/E,CAAC;aACD,KAAK,EAAE;KACX,CAAC;SACD,KAAK,EAAE;SACP,GAAG,CAAC,CAAC,CAAC;IACT,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5B,iEAAiE;IACjE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,qCAAqC;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,0BAA0B;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,wBAAwB;IACxB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B;;;;OAIG;IACH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAiB,EAAE,CAAC,WAAW,CAAC,CAAC;CACzD,CAAC,CAAC;AAGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,6BAA6B;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,kEAAkE;IAClE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IAC3C,gCAAgC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACtD,eAAe;IACf,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,sBAAsB;IACtB,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,oBAAoB;IACpB,eAAe;IACf,eAAe;IACf,eAAe;IACf,sBAAsB;IACtB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,kBAAkB;IAClB,mBAAmB;CACpB,CAAC,CAAC;AASH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEhG,yCAAyC;AACzC,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 버전 협상 (capability negotiation).
|
|
3
|
+
*
|
|
4
|
+
* 클라이언트는 자신이 지원하는 UI Block 어휘(버전 + 블록 타입 목록)를 광고하고,
|
|
5
|
+
* 에이전트/작성자는 카드를 보내기 전에 미지원 블록을 감지해 graceful degrade 한다.
|
|
6
|
+
* (RFC §9 "렌더러 격리" + docs/custom-event-ui.md §9 렌더러 레지스트리)
|
|
7
|
+
*/
|
|
8
|
+
import { type BlockType } from "./blocks.js";
|
|
9
|
+
import type { UiCardContent } from "./events.js";
|
|
10
|
+
/**
|
|
11
|
+
* UI Block 어휘 버전. 새 블록/필드를 추가하면 올린다(semver). 1.3.0 = Phase 1 신규 블록(chart…).
|
|
12
|
+
* 1.4.0 = M4 kanban·countdown(+ diff·file). 1.5.0 = collapsible·linkButton·overflow·toggle·slider + input datetime/time.
|
|
13
|
+
*/
|
|
14
|
+
export declare const UI_BLOCKS_VERSION: "1.5.0";
|
|
15
|
+
/** 스키마가 아는 모든 블록 타입 (판별 유니온에서 파생 — 단일 진실 공급원). */
|
|
16
|
+
export declare const BLOCK_TYPES: BlockType[];
|
|
17
|
+
/** 클라이언트가 광고하는 역량 서술자. */
|
|
18
|
+
export interface ClientCapabilities {
|
|
19
|
+
ui_blocks_version: string;
|
|
20
|
+
block_types: string[];
|
|
21
|
+
}
|
|
22
|
+
/** 기본 역량 = 스키마가 아는 전체. 클라이언트가 일부만 구현하면 줄여서 광고한다. */
|
|
23
|
+
export declare function defaultClientCapabilities(): ClientCapabilities;
|
|
24
|
+
export interface SupportResult {
|
|
25
|
+
supported: boolean;
|
|
26
|
+
/** 클라이언트가 렌더하지 못하는(= fallback 처리될) 블록 타입들 */
|
|
27
|
+
unsupportedBlocks: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 카드가 주어진 지원 블록 목록으로 완전히 렌더 가능한지 검사한다.
|
|
31
|
+
* 미지원 블록은 클라이언트가 안전 fallback 으로 처리하지만, 작성자/에이전트는
|
|
32
|
+
* 이 결과로 "이 클라에선 일부가 안 보일 수 있음"을 미리 알 수 있다.
|
|
33
|
+
*/
|
|
34
|
+
export declare function checkCardSupport(card: UiCardContent, supported: string[]): SupportResult;
|
|
35
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAG,OAAgB,CAAC;AAElD,kDAAkD;AAClD,eAAO,MAAM,WAAW,EAAE,SAAS,EAEnB,CAAC;AAEjB,0BAA0B;AAC1B,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,oDAAoD;AACpD,wBAAgB,yBAAyB,IAAI,kBAAkB,CAE9D;AAMD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa,CAUxF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 버전 협상 (capability negotiation).
|
|
3
|
+
*
|
|
4
|
+
* 클라이언트는 자신이 지원하는 UI Block 어휘(버전 + 블록 타입 목록)를 광고하고,
|
|
5
|
+
* 에이전트/작성자는 카드를 보내기 전에 미지원 블록을 감지해 graceful degrade 한다.
|
|
6
|
+
* (RFC §9 "렌더러 격리" + docs/custom-event-ui.md §9 렌더러 레지스트리)
|
|
7
|
+
*/
|
|
8
|
+
import { BlockSchema } from "./blocks.js";
|
|
9
|
+
/**
|
|
10
|
+
* UI Block 어휘 버전. 새 블록/필드를 추가하면 올린다(semver). 1.3.0 = Phase 1 신규 블록(chart…).
|
|
11
|
+
* 1.4.0 = M4 kanban·countdown(+ diff·file). 1.5.0 = collapsible·linkButton·overflow·toggle·slider + input datetime/time.
|
|
12
|
+
*/
|
|
13
|
+
export const UI_BLOCKS_VERSION = "1.5.0";
|
|
14
|
+
/** 스키마가 아는 모든 블록 타입 (판별 유니온에서 파생 — 단일 진실 공급원). */
|
|
15
|
+
export const BLOCK_TYPES = BlockSchema.options.map((o) => o.shape.type.value);
|
|
16
|
+
/** 기본 역량 = 스키마가 아는 전체. 클라이언트가 일부만 구현하면 줄여서 광고한다. */
|
|
17
|
+
export function defaultClientCapabilities() {
|
|
18
|
+
return { ui_blocks_version: UI_BLOCKS_VERSION, block_types: [...BLOCK_TYPES] };
|
|
19
|
+
}
|
|
20
|
+
function allCardBlocks(card) {
|
|
21
|
+
return [...card.blocks, ...(card.steps?.flatMap((s) => s.blocks) ?? [])];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 카드가 주어진 지원 블록 목록으로 완전히 렌더 가능한지 검사한다.
|
|
25
|
+
* 미지원 블록은 클라이언트가 안전 fallback 으로 처리하지만, 작성자/에이전트는
|
|
26
|
+
* 이 결과로 "이 클라에선 일부가 안 보일 수 있음"을 미리 알 수 있다.
|
|
27
|
+
*/
|
|
28
|
+
export function checkCardSupport(card, supported) {
|
|
29
|
+
const set = new Set(supported);
|
|
30
|
+
const unsupported = [
|
|
31
|
+
...new Set(allCardBlocks(card)
|
|
32
|
+
.map((b) => b.type)
|
|
33
|
+
.filter((t) => !set.has(t))),
|
|
34
|
+
];
|
|
35
|
+
return { supported: unsupported.length === 0, unsupportedBlocks: unsupported };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAGtE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAgB,CAAC;AAElD,kDAAkD;AAClD,MAAM,CAAC,MAAM,WAAW,GAAgB,WAAW,CAAC,OAAO,CAAC,GAAG,CAC7D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CACX,CAAC;AAQjB,oDAAoD;AACpD,MAAM,UAAU,yBAAyB;IACvC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB;IACxC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB,EAAE,SAAmB;IACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG;QAClB,GAAG,IAAI,GAAG,CACR,aAAa,CAAC,IAAI,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC9B;KACF,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC;AACjF,CAAC"}
|