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