convex-durable-agents 0.1.2 → 0.1.3
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 +67 -17
- package/dist/react/index.d.ts +112 -6
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +230 -91
- package/dist/react/index.js.map +1 -1
- package/package.json +2 -2
- package/src/react/index.ts +341 -111
package/README.md
CHANGED
|
@@ -169,32 +169,44 @@ export const getWeather = internalAction({
|
|
|
169
169
|
Use the React hooks to build your chat interface:
|
|
170
170
|
|
|
171
171
|
```tsx
|
|
172
|
-
import {
|
|
173
|
-
import { useThread } from "convex-durable-agents/react";
|
|
172
|
+
import { useAgentChat, getMessageKey } from "convex-durable-agents/react";
|
|
174
173
|
import { api } from "../convex/_generated/api";
|
|
175
174
|
|
|
176
175
|
function ChatView({ threadId }: { threadId: string }) {
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
176
|
+
const {
|
|
177
|
+
messages,
|
|
178
|
+
status,
|
|
179
|
+
isRunning,
|
|
180
|
+
isFailed,
|
|
181
|
+
isStopped,
|
|
182
|
+
sendMessage,
|
|
183
|
+
stop,
|
|
184
|
+
resume,
|
|
185
|
+
} = useAgentChat({
|
|
186
|
+
listMessages: api.chat.listMessagesWithStreams,
|
|
187
|
+
getThread: api.chat.getThread,
|
|
188
|
+
sendMessage: api.chat.sendMessage,
|
|
189
|
+
stopThread: api.chat.stopThread,
|
|
190
|
+
resumeThread: api.chat.resumeThread,
|
|
191
|
+
threadId,
|
|
192
|
+
});
|
|
185
193
|
|
|
186
194
|
return (
|
|
187
195
|
<div>
|
|
188
196
|
{messages.map((msg) => (
|
|
189
|
-
<div key={msg
|
|
190
|
-
<strong>{msg.role}:</strong> {msg.text}
|
|
197
|
+
<div key={getMessageKey(msg)}>
|
|
198
|
+
<strong>{msg.role}:</strong> {msg.parts.map((p) => p.type === "text" ? p.text : null)}
|
|
191
199
|
</div>
|
|
192
200
|
))}
|
|
193
201
|
|
|
202
|
+
{isRunning && <button onClick={() => stop()}>Stop</button>}
|
|
203
|
+
{(isFailed || isStopped) && <button onClick={() => resume()}>Resume</button>}
|
|
204
|
+
|
|
194
205
|
<input
|
|
195
206
|
onKeyPress={(e) => {
|
|
196
207
|
if (e.key === "Enter" && !isRunning) {
|
|
197
|
-
sendMessage(
|
|
208
|
+
sendMessage(e.currentTarget.value);
|
|
209
|
+
e.currentTarget.value = "";
|
|
198
210
|
}
|
|
199
211
|
}}
|
|
200
212
|
disabled={isRunning}
|
|
@@ -306,9 +318,46 @@ createAsyncTool({
|
|
|
306
318
|
|
|
307
319
|
### React Hooks
|
|
308
320
|
|
|
321
|
+
#### `useAgentChat(options)`
|
|
322
|
+
|
|
323
|
+
All-in-one hook for chat functionality that combines thread state with mutations:
|
|
324
|
+
|
|
325
|
+
```ts
|
|
326
|
+
const {
|
|
327
|
+
messages, // UIMessage[]
|
|
328
|
+
thread, // ThreadDoc | null
|
|
329
|
+
status, // ThreadStatus
|
|
330
|
+
isLoading, // boolean
|
|
331
|
+
isRunning, // boolean
|
|
332
|
+
isComplete, // boolean
|
|
333
|
+
isFailed, // boolean
|
|
334
|
+
isStopped, // boolean
|
|
335
|
+
sendMessage, // (prompt: string) => Promise<null>
|
|
336
|
+
stop, // () => Promise<null>
|
|
337
|
+
resume, // (prompt?: string) => Promise<null>
|
|
338
|
+
} = useAgentChat({
|
|
339
|
+
listMessages: api.chat.listMessagesWithStreams,
|
|
340
|
+
getThread: api.chat.getThread,
|
|
341
|
+
sendMessage: api.chat.sendMessage,
|
|
342
|
+
stopThread: api.chat.stopThread,
|
|
343
|
+
resumeThread: api.chat.resumeThread,
|
|
344
|
+
threadId,
|
|
345
|
+
stream: true, // optional, defaults to true
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
// Send a message (threadId is automatically included)
|
|
349
|
+
await sendMessage("Hello!");
|
|
350
|
+
|
|
351
|
+
// Stop the agent
|
|
352
|
+
await stop();
|
|
353
|
+
|
|
354
|
+
// Resume after stopping or failure
|
|
355
|
+
await resume();
|
|
356
|
+
```
|
|
357
|
+
|
|
309
358
|
#### `useThread(messagesQuery, threadQuery, args, options?)`
|
|
310
359
|
|
|
311
|
-
|
|
360
|
+
Lower-level hook for thread status and messages (use `useAgentChat` for most cases):
|
|
312
361
|
|
|
313
362
|
```ts
|
|
314
363
|
const {
|
|
@@ -443,9 +492,10 @@ defineAgentApi(components.durableAgents, internal.chat.chatAgentHandler, {
|
|
|
443
492
|
│ Your Application │
|
|
444
493
|
├─────────────────────────────────────────────────────────────┤
|
|
445
494
|
│ defineAgentApi() │ React Hooks │
|
|
446
|
-
│ - createThread │ -
|
|
447
|
-
│ - sendMessage │ -
|
|
448
|
-
│ - stopThread │ -
|
|
495
|
+
│ - createThread │ - useAgentChat │
|
|
496
|
+
│ - sendMessage │ - useThread │
|
|
497
|
+
│ - stopThread │ - useMessages │
|
|
498
|
+
│ - resumeThread │ - useSmoothText │
|
|
449
499
|
├─────────────────────────────────────────────────────────────┤
|
|
450
500
|
│ Durable Agent Component │
|
|
451
501
|
├──────────────┬──────────────┬──────────────┬────────────────┤
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hooks for the durable_agent component.
|
|
3
|
+
*/
|
|
4
|
+
import type { UIMessage as AIUIMessage } from "ai";
|
|
1
5
|
import type { FunctionReference } from "convex/server";
|
|
2
6
|
export type ThreadStatus = "streaming" | "awaiting_tool_results" | "completed" | "failed" | "stopped";
|
|
3
7
|
export type ThreadDoc = {
|
|
@@ -16,16 +20,14 @@ export type MessageDoc = {
|
|
|
16
20
|
content: string | Array<unknown>;
|
|
17
21
|
};
|
|
18
22
|
};
|
|
19
|
-
export type
|
|
20
|
-
id: string;
|
|
23
|
+
export type ConvexUIMessageMetadata = {
|
|
21
24
|
key: string;
|
|
22
25
|
order: number;
|
|
23
|
-
role: "system" | "user" | "assistant" | "tool";
|
|
24
26
|
status: ThreadStatus | "success";
|
|
25
|
-
text: string;
|
|
26
|
-
parts: Array<unknown>;
|
|
27
27
|
_creationTime: number;
|
|
28
28
|
};
|
|
29
|
+
export type UIMessage = AIUIMessage<ConvexUIMessageMetadata>;
|
|
30
|
+
export type { TextUIPart, DynamicToolUIPart } from "ai";
|
|
29
31
|
export type StreamArgs = {
|
|
30
32
|
kind: "list";
|
|
31
33
|
startOrder?: number;
|
|
@@ -167,5 +169,109 @@ export declare function useThread(messagesQuery: MessagesQuery | StreamingMessag
|
|
|
167
169
|
isFailed: boolean;
|
|
168
170
|
isStopped: boolean;
|
|
169
171
|
};
|
|
170
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Extract text content from a UIMessage's parts
|
|
174
|
+
*/
|
|
175
|
+
export declare function getMessageText(message: UIMessage): string;
|
|
176
|
+
/**
|
|
177
|
+
* Get the status of a message from its metadata
|
|
178
|
+
*/
|
|
179
|
+
export declare function getMessageStatus(message: UIMessage): ThreadStatus | "success";
|
|
180
|
+
/**
|
|
181
|
+
* Get the key for React rendering from message metadata
|
|
182
|
+
*/
|
|
183
|
+
export declare function getMessageKey(message: UIMessage): string;
|
|
184
|
+
/**
|
|
185
|
+
* Get the order of a message from its metadata
|
|
186
|
+
*/
|
|
187
|
+
export declare function getMessageOrder(message: UIMessage): number;
|
|
188
|
+
/**
|
|
189
|
+
* Get the creation time of a message from its metadata
|
|
190
|
+
*/
|
|
191
|
+
export declare function getMessageCreationTime(message: UIMessage): number;
|
|
192
|
+
type SendMessageMutation = FunctionReference<"mutation", "public", {
|
|
193
|
+
threadId: string;
|
|
194
|
+
prompt: string;
|
|
195
|
+
}, null>;
|
|
196
|
+
type StopThreadMutation = FunctionReference<"mutation", "public", {
|
|
197
|
+
threadId: string;
|
|
198
|
+
}, null>;
|
|
199
|
+
type ResumeThreadMutation = FunctionReference<"mutation", "public", {
|
|
200
|
+
threadId: string;
|
|
201
|
+
prompt?: string;
|
|
202
|
+
}, null>;
|
|
203
|
+
export type UseAgentChatOptions = {
|
|
204
|
+
/** Query to list messages with streaming support */
|
|
205
|
+
listMessages: StreamingMessagesQuery;
|
|
206
|
+
/** Query to get thread status */
|
|
207
|
+
getThread: ThreadQuery;
|
|
208
|
+
/** Mutation to send a message */
|
|
209
|
+
sendMessage: SendMessageMutation;
|
|
210
|
+
/** Mutation to stop the thread */
|
|
211
|
+
stopThread: StopThreadMutation;
|
|
212
|
+
/** Mutation to resume the thread */
|
|
213
|
+
resumeThread: ResumeThreadMutation;
|
|
214
|
+
/** The thread ID to chat with */
|
|
215
|
+
threadId: string;
|
|
216
|
+
/** Enable streaming (defaults to true) */
|
|
217
|
+
stream?: boolean;
|
|
218
|
+
/** Stream IDs to skip */
|
|
219
|
+
skipStreamIds?: Array<string>;
|
|
220
|
+
};
|
|
221
|
+
export type UseAgentChatReturn = {
|
|
222
|
+
/** Messages in the thread */
|
|
223
|
+
messages: UIMessage[];
|
|
224
|
+
/** Thread document */
|
|
225
|
+
thread: ThreadDoc | null | undefined;
|
|
226
|
+
/** Current thread status */
|
|
227
|
+
status: ThreadStatus | undefined;
|
|
228
|
+
/** Whether the thread is loading */
|
|
229
|
+
isLoading: boolean;
|
|
230
|
+
/** Whether the thread is currently running (streaming or awaiting tool results) */
|
|
231
|
+
isRunning: boolean;
|
|
232
|
+
/** Whether the thread has completed */
|
|
233
|
+
isComplete: boolean;
|
|
234
|
+
/** Whether the thread has failed */
|
|
235
|
+
isFailed: boolean;
|
|
236
|
+
/** Whether the thread has been stopped */
|
|
237
|
+
isStopped: boolean;
|
|
238
|
+
/** Send a message to the thread */
|
|
239
|
+
sendMessage: (prompt: string) => Promise<null>;
|
|
240
|
+
/** Stop the thread */
|
|
241
|
+
stop: () => Promise<null>;
|
|
242
|
+
/** Resume the thread with an optional prompt */
|
|
243
|
+
resume: (prompt?: string) => Promise<null>;
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Combined hook for chat functionality with an agent thread.
|
|
247
|
+
*
|
|
248
|
+
* This hook combines `useThread` with streaming enabled and provides
|
|
249
|
+
* mutation functions for sending messages, stopping, and resuming the thread.
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```tsx
|
|
253
|
+
* const { messages, status, sendMessage, stop, resume, isRunning } = useAgentChat({
|
|
254
|
+
* listMessages: api.chat.listMessagesWithStreams,
|
|
255
|
+
* getThread: api.chat.getThread,
|
|
256
|
+
* sendMessage: api.chat.sendMessage,
|
|
257
|
+
* stopThread: api.chat.stopThread,
|
|
258
|
+
* resumeThread: api.chat.resumeThread,
|
|
259
|
+
* threadId,
|
|
260
|
+
* });
|
|
261
|
+
*
|
|
262
|
+
* // Send a message
|
|
263
|
+
* await sendMessage("Hello!");
|
|
264
|
+
*
|
|
265
|
+
* // Stop the agent
|
|
266
|
+
* if (isRunning) {
|
|
267
|
+
* await stop();
|
|
268
|
+
* }
|
|
269
|
+
*
|
|
270
|
+
* // Resume after stopping or failure
|
|
271
|
+
* if (isFailed || isStopped) {
|
|
272
|
+
* await resume();
|
|
273
|
+
* }
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
export declare function useAgentChat(options: UseAgentChatOptions): UseAgentChatReturn;
|
|
171
277
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAiC,MAAM,IAAI,CAAC;AAElF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOvD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,uBAAuB,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtG,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;QAC/C,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;KAClC,CAAC;CACH,CAAC;AAGF,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAGF,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAG7D,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAGxD,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAG7E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7C,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACvB,CAAC;AAGF,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;CAAE,GAC9C,SAAS,CAAC;AAUd,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,EAAE,WAAmC,EAAE,cAAsB,EAAE,KAAgB,EAAE,GAAE,iBAAsB,GACxG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAuDpD;AAMD,KAAK,WAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC;AAEhG;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAClC;IACD,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAmBA;AAMD,KAAK,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAsK9F;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAClC;IACD,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,CA0CA;AAOD,KAAK,sBAAsB,GAAG,iBAAiB,CAC7C,OAAO,EACP,QAAQ,EACR;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,EACD;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAC7D,CAAC;AA0GF;;GAEG;AAEH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,sBAAsB,EAC7B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EACnC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CAAE,GAC/D;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;CAAE,EAAE,GAAG,SAAS,CA6G5E;AAGD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,sBAAsB,EAC7B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EACnC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CAAE,GAC/D,SAAS,EAAE,GAAG,SAAS,CAsDzB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EACnC,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC/B,GACA;IACD,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,CAqEA;AAMD,KAAK,gBAAgB,GAAG;IACtB,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,aAAa,EAAE,aAAa,GAAG,sBAAsB,EACrD,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EACnC,OAAO,CAAC,EAAE,gBAAgB,GACzB;IACD,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAwBA;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAKzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAE7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAEjE;AAOD,KAAK,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAE/G,KAAK,kBAAkB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAE9F,KAAK,oBAAoB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAEjH,MAAM,MAAM,mBAAmB,GAAG;IAChC,oDAAoD;IACpD,YAAY,EAAE,sBAAsB,CAAC;IACrC,iCAAiC;IACjC,SAAS,EAAE,WAAW,CAAC;IACvB,iCAAiC;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,kCAAkC;IAClC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,oCAAoC;IACpC,YAAY,EAAE,oBAAoB,CAAC;IACnC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,sBAAsB;IACtB,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,4BAA4B;IAC5B,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,oCAAoC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sBAAsB;IACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,gDAAgD;IAChD,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAuC7E"}
|