@dudousxd/nestjs-agent-react 0.27.0 → 0.28.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/README.md +15 -2
- package/dist/{client-DNM5Qm5N.d.cts → client-CKwSMitS.d.cts} +18 -0
- package/dist/{client-DNM5Qm5N.d.ts → client-CKwSMitS.d.ts} +18 -0
- package/dist/genui-json-render.cjs +202 -370
- package/dist/genui-json-render.cjs.map +1 -1
- package/dist/genui-json-render.js +209 -373
- package/dist/genui-json-render.js.map +1 -1
- package/dist/genui.cjs +178 -320
- package/dist/genui.cjs.map +1 -1
- package/dist/genui.js +185 -323
- package/dist/genui.js.map +1 -1
- package/dist/index.cjs +1982 -2722
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +72 -10
- package/dist/index.d.ts +72 -10
- package/dist/index.js +2008 -2730
- package/dist/index.js.map +1 -1
- package/dist/markdown.cjs +23 -36
- package/dist/markdown.cjs.map +1 -1
- package/dist/markdown.js +23 -28
- package/dist/markdown.js.map +1 -1
- package/dist/media.cjs +46 -79
- package/dist/media.cjs.map +1 -1
- package/dist/media.d.cts +1 -1
- package/dist/media.d.ts +1 -1
- package/dist/media.js +46 -81
- package/dist/media.js.map +1 -1
- package/package.json +3 -2
|
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -45,7 +44,6 @@ function sharedContext(key) {
|
|
|
45
44
|
holder[symbol] = created;
|
|
46
45
|
return created;
|
|
47
46
|
}
|
|
48
|
-
__name(sharedContext, "sharedContext");
|
|
49
47
|
var AmbientRenderUiContext = sharedContext("@dudousxd/nestjs-agent-react:ambient-render-ui");
|
|
50
48
|
|
|
51
49
|
// src/genui/use-generative-ui.ts
|
|
@@ -58,7 +56,6 @@ var GENUI_TREE_COMPONENT = "genui:tree";
|
|
|
58
56
|
function isRecord(value) {
|
|
59
57
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
60
58
|
}
|
|
61
|
-
__name(isRecord, "isRecord");
|
|
62
59
|
function toGenerativeUIItem(part) {
|
|
63
60
|
if (!isRecord(part)) return null;
|
|
64
61
|
const source = part.type === "data-ui" && isRecord(part.data) ? part.data : part;
|
|
@@ -73,7 +70,6 @@ function toGenerativeUIItem(part) {
|
|
|
73
70
|
toolCallId: typeof source.toolCallId === "string" ? source.toolCallId : null
|
|
74
71
|
};
|
|
75
72
|
}
|
|
76
|
-
__name(toGenerativeUIItem, "toGenerativeUIItem");
|
|
77
73
|
var resolverCaches = /* @__PURE__ */ new WeakMap();
|
|
78
74
|
function resolveCached(resolve, name, version) {
|
|
79
75
|
let cache = resolverCaches.get(resolve);
|
|
@@ -88,49 +84,27 @@ function resolveCached(resolve, name, version) {
|
|
|
88
84
|
try {
|
|
89
85
|
const result = resolve(name, version);
|
|
90
86
|
if (result instanceof Promise) {
|
|
91
|
-
entry = {
|
|
92
|
-
|
|
93
|
-
|
|
87
|
+
entry = { resolution: { status: "loading" }, settled: null };
|
|
88
|
+
entry.settled = result.then(
|
|
89
|
+
(Component2) => {
|
|
90
|
+
entry.resolution = Component2 ? { status: "ready", Component: Component2 } : { status: "unknown" };
|
|
94
91
|
},
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
status: "ready",
|
|
100
|
-
Component: Component2
|
|
101
|
-
} : {
|
|
102
|
-
status: "unknown"
|
|
103
|
-
};
|
|
104
|
-
}, (error) => {
|
|
105
|
-
entry.resolution = {
|
|
106
|
-
status: "error",
|
|
107
|
-
error
|
|
108
|
-
};
|
|
109
|
-
});
|
|
92
|
+
(error) => {
|
|
93
|
+
entry.resolution = { status: "error", error };
|
|
94
|
+
}
|
|
95
|
+
);
|
|
110
96
|
} else {
|
|
111
97
|
entry = {
|
|
112
|
-
resolution: result ? {
|
|
113
|
-
status: "ready",
|
|
114
|
-
Component: result
|
|
115
|
-
} : {
|
|
116
|
-
status: "unknown"
|
|
117
|
-
},
|
|
98
|
+
resolution: result ? { status: "ready", Component: result } : { status: "unknown" },
|
|
118
99
|
settled: null
|
|
119
100
|
};
|
|
120
101
|
}
|
|
121
102
|
} catch (error) {
|
|
122
|
-
entry = {
|
|
123
|
-
resolution: {
|
|
124
|
-
status: "error",
|
|
125
|
-
error
|
|
126
|
-
},
|
|
127
|
-
settled: null
|
|
128
|
-
};
|
|
103
|
+
entry = { resolution: { status: "error", error }, settled: null };
|
|
129
104
|
}
|
|
130
105
|
cache.set(key, entry);
|
|
131
106
|
return entry;
|
|
132
107
|
}
|
|
133
|
-
__name(resolveCached, "resolveCached");
|
|
134
108
|
function useResolvedComponent(name, version, registry, resolve, fallbackTree) {
|
|
135
109
|
const [, setTick] = (0, import_react2.useState)(0);
|
|
136
110
|
const own = registry[name];
|
|
@@ -145,170 +119,101 @@ function useResolvedComponent(name, version, registry, resolve, fallbackTree) {
|
|
|
145
119
|
return () => {
|
|
146
120
|
live = false;
|
|
147
121
|
};
|
|
148
|
-
}, [
|
|
149
|
-
|
|
150
|
-
]);
|
|
151
|
-
if (own !== void 0) return {
|
|
152
|
-
status: "ready",
|
|
153
|
-
Component: own
|
|
154
|
-
};
|
|
122
|
+
}, [pending]);
|
|
123
|
+
if (own !== void 0) return { status: "ready", Component: own };
|
|
155
124
|
if (entry !== null && entry.resolution.status !== "unknown") return entry.resolution;
|
|
156
125
|
if (name === GENUI_TREE_COMPONENT && fallbackTree !== void 0) {
|
|
157
|
-
return {
|
|
158
|
-
status: "ready",
|
|
159
|
-
Component: fallbackTree
|
|
160
|
-
};
|
|
126
|
+
return { status: "ready", Component: fallbackTree };
|
|
161
127
|
}
|
|
162
|
-
return {
|
|
163
|
-
status: "unknown"
|
|
164
|
-
};
|
|
128
|
+
return { status: "unknown" };
|
|
165
129
|
}
|
|
166
|
-
__name(useResolvedComponent, "useResolvedComponent");
|
|
167
130
|
function useValidatedProps(catalog, name, props) {
|
|
168
131
|
const checked = catalog?.has(name) === true;
|
|
169
132
|
const immediate = (0, import_react2.useMemo)(() => {
|
|
170
|
-
if (!checked || catalog === void 0) return {
|
|
171
|
-
status: "ok",
|
|
172
|
-
props
|
|
173
|
-
};
|
|
133
|
+
if (!checked || catalog === void 0) return { status: "ok", props };
|
|
174
134
|
const result = catalog.validateSync?.(name, props);
|
|
175
135
|
if (result === void 0) return null;
|
|
176
|
-
return result.ok ? {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
issues: result.issues
|
|
182
|
-
};
|
|
183
|
-
}, [
|
|
184
|
-
checked,
|
|
185
|
-
catalog,
|
|
186
|
-
name,
|
|
187
|
-
props
|
|
188
|
-
]);
|
|
189
|
-
const [late, setLate] = (0, import_react2.useState)(null);
|
|
136
|
+
return result.ok ? { status: "ok", props: result.value } : { status: "invalid", issues: result.issues };
|
|
137
|
+
}, [checked, catalog, name, props]);
|
|
138
|
+
const [late, setLate] = (0, import_react2.useState)(
|
|
139
|
+
null
|
|
140
|
+
);
|
|
190
141
|
(0, import_react2.useEffect)(() => {
|
|
191
142
|
if (immediate !== null || catalog === void 0) return;
|
|
192
143
|
let live = true;
|
|
193
|
-
catalog.validate(name, props).then(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
status: "ok",
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
{
|
|
213
|
-
path: [],
|
|
214
|
-
message: error instanceof Error ? error.message : String(error)
|
|
215
|
-
}
|
|
216
|
-
]
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
});
|
|
144
|
+
catalog.validate(name, props).then(
|
|
145
|
+
(result) => {
|
|
146
|
+
if (!live) return;
|
|
147
|
+
setLate({
|
|
148
|
+
props,
|
|
149
|
+
result: result.ok ? { status: "ok", props: result.value } : { status: "invalid", issues: result.issues }
|
|
150
|
+
});
|
|
151
|
+
},
|
|
152
|
+
(error) => {
|
|
153
|
+
if (!live) return;
|
|
154
|
+
setLate({
|
|
155
|
+
props,
|
|
156
|
+
result: {
|
|
157
|
+
status: "invalid",
|
|
158
|
+
issues: [{ path: [], message: error instanceof Error ? error.message : String(error) }]
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
);
|
|
220
163
|
return () => {
|
|
221
164
|
live = false;
|
|
222
165
|
};
|
|
223
|
-
}, [
|
|
224
|
-
immediate,
|
|
225
|
-
catalog,
|
|
226
|
-
name,
|
|
227
|
-
props
|
|
228
|
-
]);
|
|
166
|
+
}, [immediate, catalog, name, props]);
|
|
229
167
|
if (immediate !== null) return immediate;
|
|
230
|
-
return late !== null && late.props === props ? late.result : {
|
|
231
|
-
status: "pending"
|
|
232
|
-
};
|
|
168
|
+
return late !== null && late.props === props ? late.result : { status: "pending" };
|
|
233
169
|
}
|
|
234
|
-
__name(useValidatedProps, "useValidatedProps");
|
|
235
170
|
function useGenerativeUIState(part, options, fallbackTree) {
|
|
236
|
-
const item = (0, import_react2.useMemo)(() => toGenerativeUIItem(part), [
|
|
237
|
-
part
|
|
238
|
-
]);
|
|
171
|
+
const item = (0, import_react2.useMemo)(() => toGenerativeUIItem(part), [part]);
|
|
239
172
|
const name = item?.component ?? "";
|
|
240
|
-
const resolution = useResolvedComponent(
|
|
173
|
+
const resolution = useResolvedComponent(
|
|
174
|
+
name,
|
|
175
|
+
item?.version ?? null,
|
|
176
|
+
options.registry,
|
|
177
|
+
item === null ? void 0 : options.resolveComponent,
|
|
178
|
+
fallbackTree
|
|
179
|
+
);
|
|
241
180
|
const empty = (0, import_react2.useMemo)(() => ({}), []);
|
|
242
|
-
const validation = useValidatedProps(
|
|
181
|
+
const validation = useValidatedProps(
|
|
182
|
+
item === null || name === GENUI_TREE_COMPONENT ? void 0 : options.catalog,
|
|
183
|
+
name,
|
|
184
|
+
item?.props ?? empty
|
|
185
|
+
);
|
|
243
186
|
if (item === null) return null;
|
|
244
|
-
if (resolution.status === "loading") return {
|
|
245
|
-
|
|
246
|
-
item
|
|
247
|
-
};
|
|
248
|
-
if (resolution.status === "unknown") return {
|
|
249
|
-
status: "problem",
|
|
250
|
-
reason: "unknown",
|
|
251
|
-
item
|
|
252
|
-
};
|
|
187
|
+
if (resolution.status === "loading") return { status: "loading", item };
|
|
188
|
+
if (resolution.status === "unknown") return { status: "problem", reason: "unknown", item };
|
|
253
189
|
if (resolution.status === "error") {
|
|
254
|
-
return {
|
|
255
|
-
status: "problem",
|
|
256
|
-
reason: "error",
|
|
257
|
-
item,
|
|
258
|
-
error: resolution.error
|
|
259
|
-
};
|
|
190
|
+
return { status: "problem", reason: "error", item, error: resolution.error };
|
|
260
191
|
}
|
|
261
|
-
if (validation.status === "pending") return {
|
|
262
|
-
status: "loading",
|
|
263
|
-
item
|
|
264
|
-
};
|
|
192
|
+
if (validation.status === "pending") return { status: "loading", item };
|
|
265
193
|
if (validation.status === "invalid") {
|
|
266
|
-
return {
|
|
267
|
-
status: "problem",
|
|
268
|
-
reason: "invalid",
|
|
269
|
-
item,
|
|
270
|
-
issues: validation.issues
|
|
271
|
-
};
|
|
194
|
+
return { status: "problem", reason: "invalid", item, issues: validation.issues };
|
|
272
195
|
}
|
|
273
|
-
return {
|
|
274
|
-
status: "ready",
|
|
275
|
-
item,
|
|
276
|
-
Component: resolution.Component,
|
|
277
|
-
props: validation.props
|
|
278
|
-
};
|
|
196
|
+
return { status: "ready", item, Component: resolution.Component, props: validation.props };
|
|
279
197
|
}
|
|
280
|
-
__name(useGenerativeUIState, "useGenerativeUIState");
|
|
281
198
|
|
|
282
199
|
// src/genui/generative-ui.tsx
|
|
283
|
-
var
|
|
200
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
201
|
+
var TreeScopeContext = (0, import_react3.createContext)(null);
|
|
284
202
|
function renderFallback(fallback, problem) {
|
|
285
203
|
if (typeof fallback === "function") return fallback(problem);
|
|
286
204
|
return fallback ?? null;
|
|
287
205
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
static {
|
|
291
|
-
__name(this, "ItemBoundary");
|
|
292
|
-
}
|
|
293
|
-
state = {
|
|
294
|
-
error: void 0,
|
|
295
|
-
failed: false
|
|
296
|
-
};
|
|
206
|
+
var ItemBoundary = class extends import_react3.Component {
|
|
207
|
+
state = { error: void 0, failed: false };
|
|
297
208
|
static getDerivedStateFromError(error) {
|
|
298
|
-
return {
|
|
299
|
-
error,
|
|
300
|
-
failed: true
|
|
301
|
-
};
|
|
209
|
+
return { error, failed: true };
|
|
302
210
|
}
|
|
303
211
|
componentDidCatch(error, _info) {
|
|
304
212
|
this.props.onError?.(error, this.props.item);
|
|
305
213
|
}
|
|
306
214
|
componentDidUpdate(previous) {
|
|
307
215
|
if (this.state.failed && previous.item !== this.props.item) {
|
|
308
|
-
this.setState({
|
|
309
|
-
error: void 0,
|
|
310
|
-
failed: false
|
|
311
|
-
});
|
|
216
|
+
this.setState({ error: void 0, failed: false });
|
|
312
217
|
}
|
|
313
218
|
}
|
|
314
219
|
render() {
|
|
@@ -323,139 +228,101 @@ var ItemBoundary = class ItemBoundary2 extends import_react3.Component {
|
|
|
323
228
|
}
|
|
324
229
|
};
|
|
325
230
|
function nodeItem(node, id) {
|
|
326
|
-
return {
|
|
327
|
-
id,
|
|
328
|
-
component: node.type,
|
|
329
|
-
props: node.props ?? {},
|
|
330
|
-
version: null,
|
|
331
|
-
toolCallId: null
|
|
332
|
-
};
|
|
231
|
+
return { id, component: node.type, props: node.props ?? {}, version: null, toolCallId: null };
|
|
333
232
|
}
|
|
334
|
-
__name(nodeItem, "nodeItem");
|
|
335
233
|
function TreeNode({ node, id }) {
|
|
336
234
|
const scope = (0, import_react3.useContext)(TreeScopeContext);
|
|
337
|
-
const item = (0, import_react3.useMemo)(() => nodeItem(node, id), [
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
235
|
+
const item = (0, import_react3.useMemo)(() => nodeItem(node, id), [node, id]);
|
|
236
|
+
const resolution = useResolvedComponent(
|
|
237
|
+
node.type,
|
|
238
|
+
null,
|
|
239
|
+
scope?.options.registry ?? {},
|
|
240
|
+
scope?.options.resolveComponent
|
|
241
|
+
);
|
|
342
242
|
const validation = useValidatedProps(scope?.options.catalog, node.type, item.props);
|
|
343
243
|
if (scope === null) return null;
|
|
344
244
|
if (resolution.status === "loading" || validation.status === "pending") return scope.loading;
|
|
345
245
|
if (resolution.status === "unknown") {
|
|
346
|
-
return renderFallback(scope.fallback, {
|
|
347
|
-
reason: "unknown",
|
|
348
|
-
item
|
|
349
|
-
});
|
|
246
|
+
return renderFallback(scope.fallback, { reason: "unknown", item });
|
|
350
247
|
}
|
|
351
248
|
if (resolution.status === "error") {
|
|
352
|
-
return renderFallback(scope.fallback, {
|
|
353
|
-
reason: "error",
|
|
354
|
-
item,
|
|
355
|
-
error: resolution.error
|
|
356
|
-
});
|
|
249
|
+
return renderFallback(scope.fallback, { reason: "error", item, error: resolution.error });
|
|
357
250
|
}
|
|
358
251
|
if (validation.status === "invalid") {
|
|
359
|
-
return renderFallback(scope.fallback, {
|
|
360
|
-
reason: "invalid",
|
|
361
|
-
item,
|
|
362
|
-
issues: validation.issues
|
|
363
|
-
});
|
|
252
|
+
return renderFallback(scope.fallback, { reason: "invalid", item, issues: validation.issues });
|
|
364
253
|
}
|
|
365
254
|
const Renderer2 = resolution.Component;
|
|
366
255
|
const children = Array.isArray(node.children) ? node.children : [];
|
|
367
|
-
return /* @__PURE__ */
|
|
256
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Renderer2, { ...validation.props, children: children.length > 0 ? children.map((child, index) => {
|
|
368
257
|
const childId = `${id}.${index}`;
|
|
369
|
-
return /* @__PURE__ */
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
259
|
+
ItemBoundary,
|
|
260
|
+
{
|
|
261
|
+
item: nodeItem(child, childId),
|
|
262
|
+
fallback: scope.fallback,
|
|
263
|
+
onError: scope.onError,
|
|
264
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TreeNode, { node: child, id: childId })
|
|
265
|
+
},
|
|
266
|
+
childId
|
|
267
|
+
);
|
|
268
|
+
}) : void 0 });
|
|
379
269
|
}
|
|
380
|
-
__name(TreeNode, "TreeNode");
|
|
381
270
|
function GenuiTree({ root }) {
|
|
382
271
|
if (root === void 0 || root === null || typeof root.type !== "string") return null;
|
|
383
|
-
return /* @__PURE__ */
|
|
384
|
-
node: root,
|
|
385
|
-
id: "root"
|
|
386
|
-
});
|
|
272
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TreeNode, { node: root, id: "root" });
|
|
387
273
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
resolveComponent,
|
|
407
|
-
fallback,
|
|
408
|
-
loading,
|
|
409
|
-
onError
|
|
410
|
-
]);
|
|
411
|
-
return /* @__PURE__ */ React.createElement(TreeScopeContext.Provider, {
|
|
412
|
-
value: scope
|
|
413
|
-
}, children);
|
|
414
|
-
}
|
|
415
|
-
__name(GenerativeUIScope, "GenerativeUIScope");
|
|
416
|
-
var GenuiContext = sharedContext("@dudousxd/nestjs-agent-react:genui-provider");
|
|
417
|
-
function GenuiProvider({ registry, catalog, resolveComponent, treeRenderer, fallback, loading, onError, children }) {
|
|
418
|
-
const value = (0, import_react3.useMemo)(() => ({
|
|
419
|
-
...registry !== void 0 ? {
|
|
420
|
-
registry
|
|
421
|
-
} : {},
|
|
422
|
-
...catalog !== void 0 ? {
|
|
423
|
-
catalog
|
|
424
|
-
} : {},
|
|
425
|
-
...resolveComponent !== void 0 ? {
|
|
426
|
-
resolveComponent
|
|
427
|
-
} : {},
|
|
428
|
-
...treeRenderer !== void 0 ? {
|
|
429
|
-
treeRenderer
|
|
430
|
-
} : {},
|
|
431
|
-
...fallback !== void 0 ? {
|
|
432
|
-
fallback
|
|
433
|
-
} : {},
|
|
434
|
-
...loading !== void 0 ? {
|
|
435
|
-
loading
|
|
436
|
-
} : {},
|
|
437
|
-
...onError !== void 0 ? {
|
|
274
|
+
function GenerativeUIScope({
|
|
275
|
+
registry,
|
|
276
|
+
catalog,
|
|
277
|
+
resolveComponent,
|
|
278
|
+
fallback,
|
|
279
|
+
loading = null,
|
|
280
|
+
onError,
|
|
281
|
+
children
|
|
282
|
+
}) {
|
|
283
|
+
const scope = (0, import_react3.useMemo)(
|
|
284
|
+
() => ({
|
|
285
|
+
options: {
|
|
286
|
+
registry,
|
|
287
|
+
...catalog !== void 0 ? { catalog } : {},
|
|
288
|
+
...resolveComponent !== void 0 ? { resolveComponent } : {}
|
|
289
|
+
},
|
|
290
|
+
fallback,
|
|
291
|
+
loading,
|
|
438
292
|
onError
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
293
|
+
}),
|
|
294
|
+
[registry, catalog, resolveComponent, fallback, loading, onError]
|
|
295
|
+
);
|
|
296
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TreeScopeContext.Provider, { value: scope, children });
|
|
297
|
+
}
|
|
298
|
+
var GenuiContext = sharedContext(
|
|
299
|
+
"@dudousxd/nestjs-agent-react:genui-provider"
|
|
300
|
+
);
|
|
301
|
+
function GenuiProvider({
|
|
302
|
+
registry,
|
|
303
|
+
catalog,
|
|
304
|
+
resolveComponent,
|
|
305
|
+
treeRenderer,
|
|
306
|
+
fallback,
|
|
307
|
+
loading,
|
|
308
|
+
onError,
|
|
309
|
+
children
|
|
310
|
+
}) {
|
|
311
|
+
const value = (0, import_react3.useMemo)(
|
|
312
|
+
() => ({
|
|
313
|
+
...registry !== void 0 ? { registry } : {},
|
|
314
|
+
...catalog !== void 0 ? { catalog } : {},
|
|
315
|
+
...resolveComponent !== void 0 ? { resolveComponent } : {},
|
|
316
|
+
...treeRenderer !== void 0 ? { treeRenderer } : {},
|
|
317
|
+
...fallback !== void 0 ? { fallback } : {},
|
|
318
|
+
...loading !== void 0 ? { loading } : {},
|
|
319
|
+
...onError !== void 0 ? { onError } : {}
|
|
320
|
+
}),
|
|
321
|
+
[registry, catalog, resolveComponent, treeRenderer, fallback, loading, onError]
|
|
322
|
+
);
|
|
323
|
+
const renderUi = (0, import_react3.useCallback)((block) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GenerativeUI, { part: block }), []);
|
|
324
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GenuiContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AmbientRenderUiContext.Provider, { value: renderUi, children }) });
|
|
457
325
|
}
|
|
458
|
-
__name(GenuiProvider, "GenuiProvider");
|
|
459
326
|
var NO_REGISTRY = {};
|
|
460
327
|
function useMergedOptions(own) {
|
|
461
328
|
const provided = (0, import_react3.useContext)(GenuiContext);
|
|
@@ -463,45 +330,41 @@ function useMergedOptions(own) {
|
|
|
463
330
|
const catalog = own.catalog ?? provided?.catalog;
|
|
464
331
|
const resolveComponent = own.resolveComponent ?? provided?.resolveComponent;
|
|
465
332
|
const treeRenderer = own.treeRenderer ?? provided?.treeRenderer;
|
|
466
|
-
return (0, import_react3.useMemo)(
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
catalog
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
treeRenderer
|
|
476
|
-
} : {}
|
|
477
|
-
}), [
|
|
478
|
-
registry,
|
|
479
|
-
catalog,
|
|
480
|
-
resolveComponent,
|
|
481
|
-
treeRenderer
|
|
482
|
-
]);
|
|
333
|
+
return (0, import_react3.useMemo)(
|
|
334
|
+
() => ({
|
|
335
|
+
registry,
|
|
336
|
+
...catalog !== void 0 ? { catalog } : {},
|
|
337
|
+
...resolveComponent !== void 0 ? { resolveComponent } : {},
|
|
338
|
+
...treeRenderer !== void 0 ? { treeRenderer } : {}
|
|
339
|
+
}),
|
|
340
|
+
[registry, catalog, resolveComponent, treeRenderer]
|
|
341
|
+
);
|
|
483
342
|
}
|
|
484
|
-
|
|
485
|
-
|
|
343
|
+
function GenerativeUI({
|
|
344
|
+
part,
|
|
345
|
+
registry,
|
|
346
|
+
catalog,
|
|
347
|
+
resolveComponent,
|
|
348
|
+
treeRenderer,
|
|
349
|
+
fallback: ownFallback,
|
|
350
|
+
loading: ownLoading,
|
|
351
|
+
onError: ownOnError
|
|
352
|
+
}) {
|
|
486
353
|
const provided = (0, import_react3.useContext)(GenuiContext);
|
|
487
354
|
const fallback = ownFallback ?? provided?.fallback;
|
|
488
355
|
const loading = ownLoading ?? provided?.loading ?? null;
|
|
489
356
|
const onError = ownOnError ?? provided?.onError;
|
|
490
357
|
const options = useMergedOptions({
|
|
491
|
-
...registry !== void 0 ? {
|
|
492
|
-
|
|
493
|
-
} : {},
|
|
494
|
-
...
|
|
495
|
-
catalog
|
|
496
|
-
} : {},
|
|
497
|
-
...resolveComponent !== void 0 ? {
|
|
498
|
-
resolveComponent
|
|
499
|
-
} : {},
|
|
500
|
-
...treeRenderer !== void 0 ? {
|
|
501
|
-
treeRenderer
|
|
502
|
-
} : {}
|
|
358
|
+
...registry !== void 0 ? { registry } : {},
|
|
359
|
+
...catalog !== void 0 ? { catalog } : {},
|
|
360
|
+
...resolveComponent !== void 0 ? { resolveComponent } : {},
|
|
361
|
+
...treeRenderer !== void 0 ? { treeRenderer } : {}
|
|
503
362
|
});
|
|
504
|
-
const state = useGenerativeUIState(
|
|
363
|
+
const state = useGenerativeUIState(
|
|
364
|
+
part,
|
|
365
|
+
options,
|
|
366
|
+
options.treeRenderer ?? GenuiTree
|
|
367
|
+
);
|
|
505
368
|
if (state === null) return null;
|
|
506
369
|
if (state.status === "loading") return loading;
|
|
507
370
|
if (state.status === "problem") {
|
|
@@ -509,96 +372,65 @@ function GenerativeUI({ part, registry, catalog, resolveComponent, treeRenderer,
|
|
|
509
372
|
return renderFallback(fallback, problem);
|
|
510
373
|
}
|
|
511
374
|
const Renderer2 = state.Component;
|
|
512
|
-
return /* @__PURE__ */
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
onError
|
|
523
|
-
}, /* @__PURE__ */ React.createElement(Renderer2, state.props)));
|
|
375
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
376
|
+
GenerativeUIScope,
|
|
377
|
+
{
|
|
378
|
+
...options,
|
|
379
|
+
fallback,
|
|
380
|
+
loading,
|
|
381
|
+
...onError !== void 0 ? { onError } : {},
|
|
382
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ItemBoundary, { item: state.item, fallback, onError, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Renderer2, { ...state.props }) })
|
|
383
|
+
}
|
|
384
|
+
);
|
|
524
385
|
}
|
|
525
|
-
__name(GenerativeUI, "GenerativeUI");
|
|
526
386
|
|
|
527
387
|
// src/genui/json-render.tsx
|
|
388
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
528
389
|
function treeToJsonRenderSpec(root) {
|
|
529
390
|
const elements = {};
|
|
530
391
|
let next = 0;
|
|
531
|
-
const visit =
|
|
392
|
+
const visit = (node) => {
|
|
532
393
|
const id = `el-${next++}`;
|
|
533
|
-
const entry = {
|
|
534
|
-
type: node.type,
|
|
535
|
-
props: node.props ?? {},
|
|
536
|
-
children: []
|
|
537
|
-
};
|
|
394
|
+
const entry = { type: node.type, props: node.props ?? {}, children: [] };
|
|
538
395
|
elements[id] = entry;
|
|
539
396
|
for (const child of node.children ?? []) entry.children.push(visit(child));
|
|
540
397
|
return id;
|
|
541
|
-
}, "visit");
|
|
542
|
-
return {
|
|
543
|
-
root: visit(root),
|
|
544
|
-
elements
|
|
545
398
|
};
|
|
399
|
+
return { root: visit(root), elements };
|
|
546
400
|
}
|
|
547
|
-
__name(treeToJsonRenderSpec, "treeToJsonRenderSpec");
|
|
548
401
|
function toJsonRenderRegistry(registry) {
|
|
549
|
-
return Object.fromEntries(
|
|
550
|
-
name,
|
|
551
|
-
|
|
552
|
-
|
|
402
|
+
return Object.fromEntries(
|
|
403
|
+
Object.entries(registry).map(([name, Renderer2]) => [
|
|
404
|
+
name,
|
|
405
|
+
({ element, children }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Renderer2, { ...element.props ?? {}, children })
|
|
406
|
+
])
|
|
407
|
+
);
|
|
553
408
|
}
|
|
554
|
-
__name(toJsonRenderRegistry, "toJsonRenderRegistry");
|
|
555
409
|
function JsonRenderTree({ root, registry, initialState }) {
|
|
556
|
-
const spec = (0, import_react5.useMemo)(() => root === void 0 ? null : treeToJsonRenderSpec(root), [
|
|
557
|
-
root
|
|
558
|
-
]);
|
|
410
|
+
const spec = (0, import_react5.useMemo)(() => root === void 0 ? null : treeToJsonRenderSpec(root), [root]);
|
|
559
411
|
if (spec === null) return null;
|
|
560
|
-
return /* @__PURE__ */
|
|
561
|
-
registry,
|
|
562
|
-
...initialState !== void 0 ? {
|
|
563
|
-
initialState
|
|
564
|
-
} : {}
|
|
565
|
-
}, /* @__PURE__ */ React.createElement(import_react4.Renderer, {
|
|
566
|
-
spec,
|
|
567
|
-
registry
|
|
568
|
-
}));
|
|
412
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react4.JSONUIProvider, { registry, ...initialState !== void 0 ? { initialState } : {}, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react4.Renderer, { spec, registry }) });
|
|
569
413
|
}
|
|
570
|
-
__name(JsonRenderTree, "JsonRenderTree");
|
|
571
414
|
function jsonRenderTree(registry) {
|
|
572
|
-
return
|
|
573
|
-
return /* @__PURE__ */
|
|
574
|
-
|
|
575
|
-
...root !== void 0 ? {
|
|
576
|
-
root
|
|
577
|
-
} : {}
|
|
578
|
-
});
|
|
579
|
-
}, "JsonRenderTreeFrame");
|
|
415
|
+
return function JsonRenderTreeFrame({ root }) {
|
|
416
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(JsonRenderTree, { registry, ...root !== void 0 ? { root } : {} });
|
|
417
|
+
};
|
|
580
418
|
}
|
|
581
|
-
__name(jsonRenderTree, "jsonRenderTree");
|
|
582
419
|
function GenuiProvider2({ jsonRender, treeRenderer, registry, ...rest }) {
|
|
583
420
|
const derived = (0, import_react5.useMemo)(() => {
|
|
584
421
|
if (jsonRender === void 0) return void 0;
|
|
585
422
|
return jsonRenderTree(jsonRender === true ? toJsonRenderRegistry(registry ?? {}) : jsonRender);
|
|
586
|
-
}, [
|
|
587
|
-
jsonRender,
|
|
588
|
-
registry
|
|
589
|
-
]);
|
|
423
|
+
}, [jsonRender, registry]);
|
|
590
424
|
const tree = treeRenderer ?? derived;
|
|
591
|
-
return /* @__PURE__ */
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
});
|
|
425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
426
|
+
GenuiProvider,
|
|
427
|
+
{
|
|
428
|
+
...rest,
|
|
429
|
+
...registry !== void 0 ? { registry } : {},
|
|
430
|
+
...tree !== void 0 ? { treeRenderer: tree } : {}
|
|
431
|
+
}
|
|
432
|
+
);
|
|
600
433
|
}
|
|
601
|
-
__name(GenuiProvider2, "GenuiProvider");
|
|
602
434
|
// Annotate the CommonJS export names for ESM import in node:
|
|
603
435
|
0 && (module.exports = {
|
|
604
436
|
GenuiProvider,
|