@lynx-js/genui 0.0.1-rc.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 +202 -0
- package/README.md +170 -0
- package/a2ui/README.md +140 -0
- package/a2ui/dist/catalog/Button/catalog.json +156 -0
- package/a2ui/dist/catalog/Button/index.d.ts +35 -0
- package/a2ui/dist/catalog/Button/index.js +35 -0
- package/a2ui/dist/catalog/Button/index.js.map +1 -0
- package/a2ui/dist/catalog/Card/catalog.json +24 -0
- package/a2ui/dist/catalog/Card/index.d.ts +11 -0
- package/a2ui/dist/catalog/Card/index.js +19 -0
- package/a2ui/dist/catalog/Card/index.js.map +1 -0
- package/a2ui/dist/catalog/CheckBox/catalog.json +170 -0
- package/a2ui/dist/catalog/CheckBox/index.d.ts +32 -0
- package/a2ui/dist/catalog/CheckBox/index.js +24 -0
- package/a2ui/dist/catalog/CheckBox/index.js.map +1 -0
- package/a2ui/dist/catalog/Column/catalog.json +57 -0
- package/a2ui/dist/catalog/Column/index.d.ts +15 -0
- package/a2ui/dist/catalog/Column/index.js +55 -0
- package/a2ui/dist/catalog/Column/index.js.map +1 -0
- package/a2ui/dist/catalog/Divider/catalog.json +14 -0
- package/a2ui/dist/catalog/Divider/index.d.ts +9 -0
- package/a2ui/dist/catalog/Divider/index.js +8 -0
- package/a2ui/dist/catalog/Divider/index.js.map +1 -0
- package/a2ui/dist/catalog/Icon/catalog.json +45 -0
- package/a2ui/dist/catalog/Icon/index.d.ts +14 -0
- package/a2ui/dist/catalog/Icon/index.js +11 -0
- package/a2ui/dist/catalog/Icon/index.js.map +1 -0
- package/a2ui/dist/catalog/Image/catalog.json +62 -0
- package/a2ui/dist/catalog/Image/index.d.ts +16 -0
- package/a2ui/dist/catalog/Image/index.js +30 -0
- package/a2ui/dist/catalog/Image/index.js.map +1 -0
- package/a2ui/dist/catalog/LineChart/catalog.json +98 -0
- package/a2ui/dist/catalog/LineChart/index.d.ts +31 -0
- package/a2ui/dist/catalog/LineChart/index.js +195 -0
- package/a2ui/dist/catalog/LineChart/index.js.map +1 -0
- package/a2ui/dist/catalog/List/catalog.json +52 -0
- package/a2ui/dist/catalog/List/index.d.ts +15 -0
- package/a2ui/dist/catalog/List/index.js +53 -0
- package/a2ui/dist/catalog/List/index.js.map +1 -0
- package/a2ui/dist/catalog/Modal/catalog.json +18 -0
- package/a2ui/dist/catalog/Modal/index.d.ts +12 -0
- package/a2ui/dist/catalog/Modal/index.js +33 -0
- package/a2ui/dist/catalog/Modal/index.js.map +1 -0
- package/a2ui/dist/catalog/PieChart/catalog.json +87 -0
- package/a2ui/dist/catalog/PieChart/index.d.ts +37 -0
- package/a2ui/dist/catalog/PieChart/index.js +131 -0
- package/a2ui/dist/catalog/PieChart/index.js.map +1 -0
- package/a2ui/dist/catalog/RadioGroup/catalog.json +184 -0
- package/a2ui/dist/catalog/RadioGroup/index.d.ts +36 -0
- package/a2ui/dist/catalog/RadioGroup/index.js +36 -0
- package/a2ui/dist/catalog/RadioGroup/index.js.map +1 -0
- package/a2ui/dist/catalog/Row/catalog.json +57 -0
- package/a2ui/dist/catalog/Row/index.d.ts +15 -0
- package/a2ui/dist/catalog/Row/index.js +28 -0
- package/a2ui/dist/catalog/Row/index.js.map +1 -0
- package/a2ui/dist/catalog/Slider/catalog.json +183 -0
- package/a2ui/dist/catalog/Slider/index.d.ts +41 -0
- package/a2ui/dist/catalog/Slider/index.js +39 -0
- package/a2ui/dist/catalog/Slider/index.js.map +1 -0
- package/a2ui/dist/catalog/Slider/utils.d.ts +11 -0
- package/a2ui/dist/catalog/Slider/utils.js +58 -0
- package/a2ui/dist/catalog/Slider/utils.js.map +1 -0
- package/a2ui/dist/catalog/Tabs/catalog.json +28 -0
- package/a2ui/dist/catalog/Tabs/index.d.ts +12 -0
- package/a2ui/dist/catalog/Tabs/index.js +32 -0
- package/a2ui/dist/catalog/Tabs/index.js.map +1 -0
- package/a2ui/dist/catalog/Text/catalog.json +74 -0
- package/a2ui/dist/catalog/Text/index.d.ts +18 -0
- package/a2ui/dist/catalog/Text/index.js +27 -0
- package/a2ui/dist/catalog/Text/index.js.map +1 -0
- package/a2ui/dist/catalog/TextField/catalog.json +147 -0
- package/a2ui/dist/catalog/TextField/index.d.ts +35 -0
- package/a2ui/dist/catalog/TextField/index.js +43 -0
- package/a2ui/dist/catalog/TextField/index.js.map +1 -0
- package/a2ui/dist/catalog/TextField/utils.d.ts +7 -0
- package/a2ui/dist/catalog/TextField/utils.js +51 -0
- package/a2ui/dist/catalog/TextField/utils.js.map +1 -0
- package/a2ui/dist/catalog/defineCatalog.d.ts +119 -0
- package/a2ui/dist/catalog/defineCatalog.js +196 -0
- package/a2ui/dist/catalog/defineCatalog.js.map +1 -0
- package/a2ui/dist/catalog/index.d.ts +20 -0
- package/a2ui/dist/catalog/index.js +26 -0
- package/a2ui/dist/catalog/index.js.map +1 -0
- package/a2ui/dist/catalog/utils/chart.d.ts +3 -0
- package/a2ui/dist/catalog/utils/chart.js +28 -0
- package/a2ui/dist/catalog/utils/chart.js.map +1 -0
- package/a2ui/dist/functions/index.d.ts +19 -0
- package/a2ui/dist/functions/index.js +87 -0
- package/a2ui/dist/functions/index.js.map +1 -0
- package/a2ui/dist/index.d.ts +11 -0
- package/a2ui/dist/index.js +35 -0
- package/a2ui/dist/index.js.map +1 -0
- package/a2ui/dist/react/A2UI.d.ts +77 -0
- package/a2ui/dist/react/A2UI.js +159 -0
- package/a2ui/dist/react/A2UI.js.map +1 -0
- package/a2ui/dist/react/A2UIProvider.d.ts +25 -0
- package/a2ui/dist/react/A2UIProvider.js +20 -0
- package/a2ui/dist/react/A2UIProvider.js.map +1 -0
- package/a2ui/dist/react/A2UIRenderer.d.ts +34 -0
- package/a2ui/dist/react/A2UIRenderer.js +161 -0
- package/a2ui/dist/react/A2UIRenderer.js.map +1 -0
- package/a2ui/dist/react/FormContext.d.ts +10 -0
- package/a2ui/dist/react/FormContext.js +12 -0
- package/a2ui/dist/react/FormContext.js.map +1 -0
- package/a2ui/dist/react/index.d.ts +8 -0
- package/a2ui/dist/react/index.js +23 -0
- package/a2ui/dist/react/index.js.map +1 -0
- package/a2ui/dist/react/useA2UIContext.d.ts +7 -0
- package/a2ui/dist/react/useA2UIContext.js +19 -0
- package/a2ui/dist/react/useA2UIContext.js.map +1 -0
- package/a2ui/dist/react/useAction.d.ts +9 -0
- package/a2ui/dist/react/useAction.js +38 -0
- package/a2ui/dist/react/useAction.js.map +1 -0
- package/a2ui/dist/react/useCatalog.d.ts +7 -0
- package/a2ui/dist/react/useCatalog.js +13 -0
- package/a2ui/dist/react/useCatalog.js.map +1 -0
- package/a2ui/dist/react/useChecks.d.ts +27 -0
- package/a2ui/dist/react/useChecks.js +76 -0
- package/a2ui/dist/react/useChecks.js.map +1 -0
- package/a2ui/dist/react/useDataBinding.d.ts +10 -0
- package/a2ui/dist/react/useDataBinding.js +175 -0
- package/a2ui/dist/react/useDataBinding.js.map +1 -0
- package/a2ui/dist/store/FormController.d.ts +23 -0
- package/a2ui/dist/store/FormController.js +40 -0
- package/a2ui/dist/store/FormController.js.map +1 -0
- package/a2ui/dist/store/FunctionRegistry.d.ts +47 -0
- package/a2ui/dist/store/FunctionRegistry.js +23 -0
- package/a2ui/dist/store/FunctionRegistry.js.map +1 -0
- package/a2ui/dist/store/MessageProcessor.d.ts +28 -0
- package/a2ui/dist/store/MessageProcessor.js +408 -0
- package/a2ui/dist/store/MessageProcessor.js.map +1 -0
- package/a2ui/dist/store/MessageStore.d.ts +38 -0
- package/a2ui/dist/store/MessageStore.js +37 -0
- package/a2ui/dist/store/MessageStore.js.map +1 -0
- package/a2ui/dist/store/Resource.d.ts +45 -0
- package/a2ui/dist/store/Resource.js +80 -0
- package/a2ui/dist/store/Resource.js.map +1 -0
- package/a2ui/dist/store/SignalStore.d.ts +10 -0
- package/a2ui/dist/store/SignalStore.js +29 -0
- package/a2ui/dist/store/SignalStore.js.map +1 -0
- package/a2ui/dist/store/index.d.ts +14 -0
- package/a2ui/dist/store/index.js +15 -0
- package/a2ui/dist/store/index.js.map +1 -0
- package/a2ui/dist/store/payloadNormalizer.d.ts +27 -0
- package/a2ui/dist/store/payloadNormalizer.js +179 -0
- package/a2ui/dist/store/payloadNormalizer.js.map +1 -0
- package/a2ui/dist/store/resolveFunctionCall.d.ts +18 -0
- package/a2ui/dist/store/resolveFunctionCall.js +131 -0
- package/a2ui/dist/store/resolveFunctionCall.js.map +1 -0
- package/a2ui/dist/store/types.d.ts +68 -0
- package/a2ui/dist/store/types.js +2 -0
- package/a2ui/dist/store/types.js.map +1 -0
- package/a2ui/dist/tsconfig.build.tsbuildinfo +1 -0
- package/a2ui/styles/catalog/Button.css +83 -0
- package/a2ui/styles/catalog/Card.css +49 -0
- package/a2ui/styles/catalog/CheckBox.css +46 -0
- package/a2ui/styles/catalog/Column.css +89 -0
- package/a2ui/styles/catalog/Divider.css +20 -0
- package/a2ui/styles/catalog/Icon.css +39 -0
- package/a2ui/styles/catalog/Image.css +54 -0
- package/a2ui/styles/catalog/LineChart.css +116 -0
- package/a2ui/styles/catalog/List.css +38 -0
- package/a2ui/styles/catalog/Modal.css +60 -0
- package/a2ui/styles/catalog/PieChart.css +109 -0
- package/a2ui/styles/catalog/RadioGroup.css +123 -0
- package/a2ui/styles/catalog/Row.css +83 -0
- package/a2ui/styles/catalog/Slider.css +96 -0
- package/a2ui/styles/catalog/Tabs.css +46 -0
- package/a2ui/styles/catalog/Text.css +121 -0
- package/a2ui/styles/catalog/TextField.css +48 -0
- package/a2ui/styles/theme.css +62 -0
- package/a2ui-catalog-extractor/README.md +605 -0
- package/a2ui-catalog-extractor/bin/a2ui-catalog-extractor.js +6 -0
- package/a2ui-catalog-extractor/dist/cli.d.ts +12 -0
- package/a2ui-catalog-extractor/dist/cli.js +171 -0
- package/a2ui-catalog-extractor/dist/cli.js.map +1 -0
- package/a2ui-catalog-extractor/dist/index.d.ts +140 -0
- package/a2ui-catalog-extractor/dist/index.js +755 -0
- package/a2ui-catalog-extractor/dist/index.js.map +1 -0
- package/a2ui-catalog-extractor/dist/tsconfig.build.tsbuildinfo +1 -0
- package/a2ui-catalog-extractor/skills/a2ui-catalog-extractor/SKILL.md +30 -0
- package/a2ui-prompt/README.md +65 -0
- package/a2ui-prompt/dist/index.d.ts +91 -0
- package/a2ui-prompt/dist/index.js +767 -0
- package/cli/README.md +88 -0
- package/cli/bin/cli.js +271 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/index.ts +114 -0
- package/openui/README.md +211 -0
- package/openui/dist/catalog/Action/index.d.ts +20 -0
- package/openui/dist/catalog/Action/index.js +23 -0
- package/openui/dist/catalog/Action/index.js.map +1 -0
- package/openui/dist/catalog/Button/index.d.ts +64 -0
- package/openui/dist/catalog/Button/index.js +75 -0
- package/openui/dist/catalog/Button/index.js.map +1 -0
- package/openui/dist/catalog/Card/index.d.ts +34 -0
- package/openui/dist/catalog/Card/index.js +69 -0
- package/openui/dist/catalog/Card/index.js.map +1 -0
- package/openui/dist/catalog/CardHeader/index.d.ts +5 -0
- package/openui/dist/catalog/CardHeader/index.js +18 -0
- package/openui/dist/catalog/CardHeader/index.js.map +1 -0
- package/openui/dist/catalog/Separator/index.d.ts +2 -0
- package/openui/dist/catalog/Separator/index.js +13 -0
- package/openui/dist/catalog/Separator/index.js.map +1 -0
- package/openui/dist/catalog/Stack/index.d.ts +29 -0
- package/openui/dist/catalog/Stack/index.js +61 -0
- package/openui/dist/catalog/Stack/index.js.map +1 -0
- package/openui/dist/catalog/Tag/index.d.ts +4 -0
- package/openui/dist/catalog/Tag/index.js +15 -0
- package/openui/dist/catalog/Tag/index.js.map +1 -0
- package/openui/dist/catalog/TextContent/index.d.ts +11 -0
- package/openui/dist/catalog/TextContent/index.js +33 -0
- package/openui/dist/catalog/TextContent/index.js.map +1 -0
- package/openui/dist/catalog/index.d.ts +7 -0
- package/openui/dist/catalog/index.js +11 -0
- package/openui/dist/catalog/index.js.map +1 -0
- package/openui/dist/catalog/utils.d.ts +2 -0
- package/openui/dist/catalog/utils.js +17 -0
- package/openui/dist/catalog/utils.js.map +1 -0
- package/openui/dist/core/context.d.ts +112 -0
- package/openui/dist/core/context.js +99 -0
- package/openui/dist/core/context.js.map +1 -0
- package/openui/dist/core/createLibrary.d.ts +10 -0
- package/openui/dist/core/createLibrary.js +36 -0
- package/openui/dist/core/createLibrary.js.map +1 -0
- package/openui/dist/core/hooks/index.d.ts +4 -0
- package/openui/dist/core/hooks/index.js +6 -0
- package/openui/dist/core/hooks/index.js.map +1 -0
- package/openui/dist/core/hooks/useFormValidation.d.ts +13 -0
- package/openui/dist/core/hooks/useFormValidation.js +76 -0
- package/openui/dist/core/hooks/useFormValidation.js.map +1 -0
- package/openui/dist/core/hooks/useOpenUIState.d.ts +33 -0
- package/openui/dist/core/hooks/useOpenUIState.js +413 -0
- package/openui/dist/core/hooks/useOpenUIState.js.map +1 -0
- package/openui/dist/core/hooks/useStateField.d.ts +2 -0
- package/openui/dist/core/hooks/useStateField.js +11 -0
- package/openui/dist/core/hooks/useStateField.js.map +1 -0
- package/openui/dist/core/index.d.ts +7 -0
- package/openui/dist/core/index.js +8 -0
- package/openui/dist/core/index.js.map +1 -0
- package/openui/dist/core/library.d.ts +20 -0
- package/openui/dist/core/library.js +13 -0
- package/openui/dist/core/library.js.map +1 -0
- package/openui/dist/core/renderer.css +271 -0
- package/openui/dist/core/renderer.d.ts +9 -0
- package/openui/dist/core/renderer.js +139 -0
- package/openui/dist/core/renderer.js.map +1 -0
- package/openui/dist/core/utils.d.ts +1 -0
- package/openui/dist/core/utils.js +76 -0
- package/openui/dist/core/utils.js.map +1 -0
- package/package.json +120 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
// Copyright 2026 The Lynx Authors. All rights reserved.
|
|
2
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
|
+
// LICENSE file in the root directory of this source tree.
|
|
4
|
+
import { ACTION_STEPS, BuiltinActionType, createQueryManager, createStore, createStreamingParser, enrichErrors, evaluate, evaluateElementProps, } from '@openuidev/lang-core';
|
|
5
|
+
import { useCallback, useEffect, useMemo, useRef, useSyncExternalStore, } from '@lynx-js/react';
|
|
6
|
+
/** Unwrap { value, componentType } wrapper from form field entries. Returns raw value. */
|
|
7
|
+
function unwrapFieldValue(v) {
|
|
8
|
+
if (v
|
|
9
|
+
&& typeof v === 'object'
|
|
10
|
+
&& !Array.isArray(v)
|
|
11
|
+
&& 'value' in v) {
|
|
12
|
+
return v['value'];
|
|
13
|
+
}
|
|
14
|
+
return v;
|
|
15
|
+
}
|
|
16
|
+
function evaluateString(ast, evaluationContext) {
|
|
17
|
+
const evaluated = evaluate(ast, evaluationContext);
|
|
18
|
+
return typeof evaluated === 'string' ? evaluated : '';
|
|
19
|
+
}
|
|
20
|
+
function evaluateNumber(ast, evaluationContext) {
|
|
21
|
+
const evaluated = evaluate(ast, evaluationContext);
|
|
22
|
+
return typeof evaluated === 'number' ? evaluated : undefined;
|
|
23
|
+
}
|
|
24
|
+
function evaluateRecord(ast, evaluationContext) {
|
|
25
|
+
const evaluated = evaluate(ast, evaluationContext);
|
|
26
|
+
return (typeof evaluated === 'object'
|
|
27
|
+
&& evaluated !== null
|
|
28
|
+
&& !Array.isArray(evaluated))
|
|
29
|
+
? evaluated
|
|
30
|
+
: {};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Core state hook — extracts all form state, action handling, parser
|
|
34
|
+
* management, and context assembly out of the Renderer component.
|
|
35
|
+
*
|
|
36
|
+
* Store holds everything: $bindings as top-level keys, form fields nested
|
|
37
|
+
* under formName as plain values.
|
|
38
|
+
*/
|
|
39
|
+
export function useOpenUIState({ response, library, isStreaming, onAction, onStateUpdate, initialState, toolProvider, onError, }, renderDeep) {
|
|
40
|
+
// ─── Streaming parser (incremental — caches completed statements) ───
|
|
41
|
+
const sp = useMemo(() => createStreamingParser(library.toJSONSchema(), library.root), [library]);
|
|
42
|
+
// ─── Parse result ───
|
|
43
|
+
const parseExceptionRef = useRef(null);
|
|
44
|
+
const result = useMemo(() => {
|
|
45
|
+
parseExceptionRef.current = null;
|
|
46
|
+
if (!response)
|
|
47
|
+
return null;
|
|
48
|
+
try {
|
|
49
|
+
return sp.set(response);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
53
|
+
parseExceptionRef.current = {
|
|
54
|
+
source: 'parser',
|
|
55
|
+
code: 'parse-exception',
|
|
56
|
+
message: `Parser crashed: ${msg}`,
|
|
57
|
+
hint: 'The response may contain syntax the parser cannot handle',
|
|
58
|
+
};
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}, [sp, response]);
|
|
62
|
+
// ─── Store (holds everything: $bindings + form fields) ───
|
|
63
|
+
const store = useMemo(() => createStore(), []);
|
|
64
|
+
// ─── QueryManager ───
|
|
65
|
+
const queryManager = useMemo(() => createQueryManager(toolProvider ?? null), [toolProvider]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
queryManager.activate();
|
|
68
|
+
return () => queryManager.dispose();
|
|
69
|
+
}, [queryManager]);
|
|
70
|
+
// ─── Initialize Store ───
|
|
71
|
+
const storeInitKeyRef = useRef(Symbol());
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (!result?.stateDeclarations && !initialState)
|
|
74
|
+
return;
|
|
75
|
+
const key = `${JSON.stringify(result?.stateDeclarations)}::${JSON.stringify(initialState)}`;
|
|
76
|
+
if (storeInitKeyRef.current === key)
|
|
77
|
+
return;
|
|
78
|
+
storeInitKeyRef.current = key;
|
|
79
|
+
// Split initialState: $-prefixed keys are bindings, everything else is form state
|
|
80
|
+
const bindingDefaults = {};
|
|
81
|
+
if (initialState) {
|
|
82
|
+
for (const [key, value] of Object.entries(initialState)) {
|
|
83
|
+
if (key.startsWith('$')) {
|
|
84
|
+
bindingDefaults[key] = value;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Form state — restore as-is (preserves { value, componentType } wrapper)
|
|
88
|
+
store.set(key, value);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
store.initialize(result?.stateDeclarations ?? {}, bindingDefaults);
|
|
93
|
+
}, [result?.stateDeclarations, store, initialState]);
|
|
94
|
+
// ─── Subscribe to Store and QueryManager for re-renders ───
|
|
95
|
+
const storeSnapshot = useSyncExternalStore((listener) => store.subscribe(listener), () => store.getSnapshot(), () => store.getSnapshot());
|
|
96
|
+
const querySnapshot = useSyncExternalStore((listener) => queryManager.subscribe(listener), () => queryManager.getSnapshot(), () => queryManager.getSnapshot());
|
|
97
|
+
// ─── Build EvaluationContext ───
|
|
98
|
+
const evaluationContext = useMemo(() => ({
|
|
99
|
+
getState: (name) => unwrapFieldValue(store.get(name)),
|
|
100
|
+
resolveRef: (name) => {
|
|
101
|
+
const mutResult = queryManager.getMutationResult(name);
|
|
102
|
+
if (mutResult)
|
|
103
|
+
return mutResult;
|
|
104
|
+
return queryManager.getResult(name);
|
|
105
|
+
},
|
|
106
|
+
}), [store, queryManager]);
|
|
107
|
+
// ─── Evaluate and submit queries ───
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (isStreaming)
|
|
110
|
+
return;
|
|
111
|
+
const queryStmts = result?.queryStatements ?? [];
|
|
112
|
+
const evaluatedNodes = queryStmts.map((qn) => {
|
|
113
|
+
const relevantDeps = {};
|
|
114
|
+
if (qn.deps) {
|
|
115
|
+
for (const ref of qn.deps) {
|
|
116
|
+
relevantDeps[ref] = storeSnapshot[ref];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const node = {
|
|
120
|
+
statementId: qn.statementId,
|
|
121
|
+
toolName: qn.toolAST
|
|
122
|
+
? evaluateString(qn.toolAST, evaluationContext)
|
|
123
|
+
: '',
|
|
124
|
+
args: qn.argsAST ? evaluate(qn.argsAST, evaluationContext) : null,
|
|
125
|
+
defaults: qn.defaultsAST
|
|
126
|
+
? evaluate(qn.defaultsAST, evaluationContext)
|
|
127
|
+
: null,
|
|
128
|
+
deps: Object.keys(relevantDeps).length > 0 ? relevantDeps : undefined,
|
|
129
|
+
complete: qn.complete,
|
|
130
|
+
};
|
|
131
|
+
if (qn.refreshAST) {
|
|
132
|
+
const interval = evaluateNumber(qn.refreshAST, evaluationContext);
|
|
133
|
+
if (interval !== undefined) {
|
|
134
|
+
node.refreshInterval = interval;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return node;
|
|
138
|
+
});
|
|
139
|
+
// Always call — empty array clears removed queries and their errors
|
|
140
|
+
queryManager.evaluateQueries(evaluatedNodes);
|
|
141
|
+
}, [
|
|
142
|
+
isStreaming,
|
|
143
|
+
result?.queryStatements,
|
|
144
|
+
evaluationContext,
|
|
145
|
+
queryManager,
|
|
146
|
+
storeSnapshot,
|
|
147
|
+
]);
|
|
148
|
+
// ─── Register mutations ───
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
if (isStreaming)
|
|
151
|
+
return;
|
|
152
|
+
const mutStmts = result?.mutationStatements ?? [];
|
|
153
|
+
const nodes = mutStmts.map((mn) => ({
|
|
154
|
+
statementId: mn.statementId,
|
|
155
|
+
toolName: mn.toolAST ? evaluateString(mn.toolAST, evaluationContext) : '',
|
|
156
|
+
}));
|
|
157
|
+
// Always call — empty array clears removed mutations and their errors
|
|
158
|
+
queryManager.registerMutations(nodes);
|
|
159
|
+
}, [
|
|
160
|
+
isStreaming,
|
|
161
|
+
result?.mutationStatements,
|
|
162
|
+
evaluationContext,
|
|
163
|
+
queryManager,
|
|
164
|
+
]);
|
|
165
|
+
// ─── Ref for stable callbacks ───
|
|
166
|
+
const propsRef = useRef({ onAction, onStateUpdate, onError });
|
|
167
|
+
propsRef.current = { onAction, onStateUpdate, onError };
|
|
168
|
+
const resultRef = useRef(result);
|
|
169
|
+
resultRef.current = result;
|
|
170
|
+
// ─── Fire onStateUpdate when Store changes ───
|
|
171
|
+
const lastInitSnapshotRef = useRef(null);
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
lastInitSnapshotRef.current = store.getSnapshot();
|
|
174
|
+
const unsub = store.subscribe(() => {
|
|
175
|
+
const currentSnapshot = store.getSnapshot();
|
|
176
|
+
if (currentSnapshot === lastInitSnapshotRef.current)
|
|
177
|
+
return;
|
|
178
|
+
lastInitSnapshotRef.current = null;
|
|
179
|
+
propsRef.current.onStateUpdate?.(currentSnapshot);
|
|
180
|
+
});
|
|
181
|
+
return unsub;
|
|
182
|
+
}, [store]);
|
|
183
|
+
// ─── getFieldValue ───
|
|
184
|
+
const getFieldValue = useCallback((formName, name) => {
|
|
185
|
+
if (!formName)
|
|
186
|
+
return unwrapFieldValue(store.get(name));
|
|
187
|
+
const formData = store.get(formName);
|
|
188
|
+
if (!formData || typeof formData !== 'object' || Array.isArray(formData))
|
|
189
|
+
return undefined;
|
|
190
|
+
return unwrapFieldValue(formData[name]);
|
|
191
|
+
}, [store]);
|
|
192
|
+
// ─── setFieldValue ───
|
|
193
|
+
const setFieldValue = useCallback((formName, componentType, name, value, shouldTriggerSaveCallback = true) => {
|
|
194
|
+
const wrapped = { value, componentType };
|
|
195
|
+
if (formName) {
|
|
196
|
+
const raw = store.get(formName);
|
|
197
|
+
const formData = raw && typeof raw === 'object' && !Array.isArray(raw)
|
|
198
|
+
? raw
|
|
199
|
+
: {};
|
|
200
|
+
store.set(formName, { ...formData, [name]: wrapped });
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
store.set(name, wrapped);
|
|
204
|
+
}
|
|
205
|
+
if (shouldTriggerSaveCallback) {
|
|
206
|
+
propsRef.current.onStateUpdate?.(store.getSnapshot());
|
|
207
|
+
}
|
|
208
|
+
}, [store]);
|
|
209
|
+
// ─── Materialize form payload ───
|
|
210
|
+
const getFormPayload = useCallback((formName) => {
|
|
211
|
+
if (formName) {
|
|
212
|
+
const raw = store.get(formName);
|
|
213
|
+
if (raw && typeof raw === 'object' && !Array.isArray(raw)) {
|
|
214
|
+
return { [formName]: raw };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return store.getSnapshot();
|
|
218
|
+
}, [store]);
|
|
219
|
+
// ─── triggerAction ───
|
|
220
|
+
const triggerAction = useCallback(async (userMessage, formName, action) => {
|
|
221
|
+
const formPayload = getFormPayload(formName);
|
|
222
|
+
const { onAction: handler } = propsRef.current;
|
|
223
|
+
function buildEvent(type, params, humanFriendlyMessage) {
|
|
224
|
+
const event = { type, params, humanFriendlyMessage };
|
|
225
|
+
if (formPayload !== undefined)
|
|
226
|
+
event.formState = formPayload;
|
|
227
|
+
if (formName !== undefined)
|
|
228
|
+
event.formName = formName;
|
|
229
|
+
return event;
|
|
230
|
+
}
|
|
231
|
+
// Legacy action config path (v0.1 compat) — { type?, params? }
|
|
232
|
+
if (action && !('steps' in action)) {
|
|
233
|
+
const actionType = action.type
|
|
234
|
+
?? BuiltinActionType.ContinueConversation;
|
|
235
|
+
const params = { ...(action.params ?? {}) };
|
|
236
|
+
// v0.1 compat — url and context were top-level, not in params
|
|
237
|
+
if (action.url)
|
|
238
|
+
params['url'] = action.url;
|
|
239
|
+
if (action.context)
|
|
240
|
+
params['context'] = action.context;
|
|
241
|
+
handler?.(buildEvent(actionType, params, userMessage));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// ActionPlan path (v0.5) — sequential steps with halt-on-mutation-failure
|
|
245
|
+
const actionPlan = action;
|
|
246
|
+
if (actionPlan?.steps) {
|
|
247
|
+
for (const step of actionPlan.steps) {
|
|
248
|
+
switch (step.type) {
|
|
249
|
+
case ACTION_STEPS.Run: {
|
|
250
|
+
if (step.refType === 'mutation') {
|
|
251
|
+
const mn = resultRef.current?.mutationStatements?.find((m) => m.statementId === step.statementId);
|
|
252
|
+
const evaluatedArgs = mn?.argsAST
|
|
253
|
+
? evaluateRecord(mn.argsAST, evaluationContext)
|
|
254
|
+
: {};
|
|
255
|
+
const ok = await queryManager.fireMutation(step.statementId, evaluatedArgs);
|
|
256
|
+
if (!ok)
|
|
257
|
+
return; // halt on failure
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
queryManager.invalidate([step.statementId]);
|
|
261
|
+
}
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
case ACTION_STEPS.ToAssistant:
|
|
265
|
+
handler?.(buildEvent(BuiltinActionType.ContinueConversation, step.context ? { context: step.context } : {}, step.message));
|
|
266
|
+
break;
|
|
267
|
+
case ACTION_STEPS.OpenUrl:
|
|
268
|
+
handler?.(buildEvent(BuiltinActionType.OpenUrl, { url: step.url }, ''));
|
|
269
|
+
break;
|
|
270
|
+
case ACTION_STEPS.Set: {
|
|
271
|
+
const value = evaluate(step.valueAST, evaluationContext);
|
|
272
|
+
store.set(step.target, value);
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
case ACTION_STEPS.Reset: {
|
|
276
|
+
const decls = resultRef.current?.stateDeclarations ?? {};
|
|
277
|
+
for (const target of step.targets) {
|
|
278
|
+
store.set(target, decls[target] ?? null);
|
|
279
|
+
}
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
// Default — ContinueConversation with label
|
|
287
|
+
handler?.(buildEvent(BuiltinActionType.ContinueConversation, {}, userMessage));
|
|
288
|
+
}, [queryManager, evaluationContext, getFormPayload, store]);
|
|
289
|
+
// ─── reportError (for error boundary) ───
|
|
290
|
+
const renderErrorsRef = useRef([]);
|
|
291
|
+
const isStreamingRef = useRef(isStreaming);
|
|
292
|
+
isStreamingRef.current = isStreaming;
|
|
293
|
+
const reportError = useCallback((error) => {
|
|
294
|
+
// Skip during streaming — render errors are transient and onError won't fire until streaming stops
|
|
295
|
+
if (isStreamingRef.current)
|
|
296
|
+
return;
|
|
297
|
+
renderErrorsRef.current.push(error);
|
|
298
|
+
}, []);
|
|
299
|
+
// ─── Context value ───
|
|
300
|
+
const contextValue = useMemo(() => ({
|
|
301
|
+
library,
|
|
302
|
+
renderNode: renderDeep,
|
|
303
|
+
triggerAction,
|
|
304
|
+
isStreaming,
|
|
305
|
+
getFieldValue,
|
|
306
|
+
setFieldValue,
|
|
307
|
+
store,
|
|
308
|
+
evaluationContext,
|
|
309
|
+
reportError,
|
|
310
|
+
}), [
|
|
311
|
+
library,
|
|
312
|
+
renderDeep,
|
|
313
|
+
isStreaming,
|
|
314
|
+
triggerAction,
|
|
315
|
+
getFieldValue,
|
|
316
|
+
setFieldValue,
|
|
317
|
+
store,
|
|
318
|
+
evaluationContext,
|
|
319
|
+
reportError,
|
|
320
|
+
]);
|
|
321
|
+
// ─── Evaluate props ───
|
|
322
|
+
const runtimeErrorsRef = useRef([]);
|
|
323
|
+
const evaluatedResult = useMemo(() => {
|
|
324
|
+
if (!result?.root)
|
|
325
|
+
return result;
|
|
326
|
+
// Fresh errors array each pass — avoids mutating memoized context
|
|
327
|
+
const errors = [];
|
|
328
|
+
const evalCtx = {
|
|
329
|
+
ctx: evaluationContext,
|
|
330
|
+
library,
|
|
331
|
+
store,
|
|
332
|
+
errors,
|
|
333
|
+
};
|
|
334
|
+
try {
|
|
335
|
+
const evaluatedRoot = evaluateElementProps(result.root, evalCtx);
|
|
336
|
+
runtimeErrorsRef.current = errors;
|
|
337
|
+
return { ...result, root: evaluatedRoot };
|
|
338
|
+
}
|
|
339
|
+
catch (e) {
|
|
340
|
+
// Safety net — per-prop catch in evaluateElementProps handles most cases
|
|
341
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
342
|
+
errors.push({
|
|
343
|
+
source: 'runtime',
|
|
344
|
+
code: 'runtime-error',
|
|
345
|
+
message: `Prop evaluation failed: ${msg}`,
|
|
346
|
+
});
|
|
347
|
+
runtimeErrorsRef.current = errors;
|
|
348
|
+
return result;
|
|
349
|
+
}
|
|
350
|
+
}, [result, evaluationContext, library, store, storeSnapshot, querySnapshot]);
|
|
351
|
+
const isQueryLoading = querySnapshot.__openui_loading.length > 0;
|
|
352
|
+
// ─── Collect and fire onError ───
|
|
353
|
+
const lastErrorKeyRef = useRef('');
|
|
354
|
+
useEffect(() => {
|
|
355
|
+
if (isStreaming) {
|
|
356
|
+
// Clear stale errors from previous session so the correction loop
|
|
357
|
+
// gets a clean signal when this streaming session completes.
|
|
358
|
+
if (lastErrorKeyRef.current !== '') {
|
|
359
|
+
lastErrorKeyRef.current = '';
|
|
360
|
+
propsRef.current.onError?.([]);
|
|
361
|
+
}
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const errors = [];
|
|
365
|
+
// Parser exception (parser itself crashed)
|
|
366
|
+
if (parseExceptionRef.current) {
|
|
367
|
+
errors.push(parseExceptionRef.current);
|
|
368
|
+
}
|
|
369
|
+
// Parse failure — response exists but produced no renderable root
|
|
370
|
+
if (response && !result?.root && !parseExceptionRef.current) {
|
|
371
|
+
errors.push({
|
|
372
|
+
source: 'parser',
|
|
373
|
+
code: 'parse-failed',
|
|
374
|
+
message: result
|
|
375
|
+
? 'Code parsed but produced no renderable root component'
|
|
376
|
+
: 'Response could not be parsed as valid openui-lang',
|
|
377
|
+
hint: `The entire response must be valid openui-lang code starting with root = ${library.root ?? 'Root'}(...)`,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
// Parser validation errors → enriched OpenUIError (with hints)
|
|
381
|
+
if (result?.meta?.errors?.length) {
|
|
382
|
+
errors.push(...enrichErrors(result.meta.errors, library.toJSONSchema(), Object.keys(library.components)));
|
|
383
|
+
}
|
|
384
|
+
// Runtime eval errors (collected per-prop by evaluateElementProps)
|
|
385
|
+
errors.push(...runtimeErrorsRef.current);
|
|
386
|
+
// Render errors (collected by error boundary via reportError)
|
|
387
|
+
errors.push(...renderErrorsRef.current);
|
|
388
|
+
renderErrorsRef.current = [];
|
|
389
|
+
// Query/mutation tool errors — already OpenUIError, pass through directly
|
|
390
|
+
errors.push(...(querySnapshot.__openui_errors ?? []));
|
|
391
|
+
// Deduplicate — only fire when errors actually change
|
|
392
|
+
const key = JSON.stringify(errors);
|
|
393
|
+
if (key === lastErrorKeyRef.current)
|
|
394
|
+
return;
|
|
395
|
+
lastErrorKeyRef.current = key;
|
|
396
|
+
// Fire onError or fall back to console.warn
|
|
397
|
+
if (propsRef.current.onError) {
|
|
398
|
+
propsRef.current.onError(errors);
|
|
399
|
+
}
|
|
400
|
+
else if (errors.length > 0) {
|
|
401
|
+
for (const e of errors) {
|
|
402
|
+
console.warn(`[openui] ${e.source}/${e.code}: ${e.message}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}, [isStreaming, response, result, evaluatedResult, querySnapshot, library]);
|
|
406
|
+
return {
|
|
407
|
+
result: evaluatedResult,
|
|
408
|
+
parseResult: result,
|
|
409
|
+
contextValue,
|
|
410
|
+
isQueryLoading,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=useOpenUIState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOpenUIState.js","sourceRoot":"","sources":["../../../src/core/hooks/useOpenUIState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Copyright 2026 The Lynx Authors. All rights reserved.
|
|
2
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
|
+
// LICENSE file in the root directory of this source tree.
|
|
4
|
+
import { resolveStateField } from '@openuidev/lang-core';
|
|
5
|
+
import { useFormName, useOpenUI } from '../context.js';
|
|
6
|
+
export function useStateField(name, value) {
|
|
7
|
+
const ctx = useOpenUI();
|
|
8
|
+
const formName = useFormName();
|
|
9
|
+
return resolveStateField(name, value, ctx.store ?? null, ctx.evaluationContext ?? null, (fieldName) => ctx.getFieldValue(formName, fieldName), (fieldName, nextValue) => ctx.setFieldValue(formName, undefined, fieldName, nextValue));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=useStateField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStateField.js","sourceRoot":"","sources":["../../../src/core/hooks/useStateField.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,KAAS;IAET,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,OAAO,iBAAiB,CACtB,IAAI,EACJ,KAAK,EACL,GAAG,CAAC,KAAK,IAAI,IAAI,EACjB,GAAG,CAAC,iBAAiB,IAAI,IAAI,EAC7B,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,EACrD,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CACvB,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createParser, createStreamingParser } from '@openuidev/lang-core';
|
|
2
|
+
export type { ActionEvent, LibraryJSONSchema, ParseResult, StreamParser, } from '@openuidev/lang-core';
|
|
3
|
+
export { createOpenUiLibrary } from './createLibrary.js';
|
|
4
|
+
export type { CreateOpenUiLibraryOptions } from './createLibrary.js';
|
|
5
|
+
export type { ComponentGroup, ComponentRenderer, ComponentRenderProps, DefinedComponent, Library, LibraryDefinition, } from './library.js';
|
|
6
|
+
export { defineComponent } from './library.js';
|
|
7
|
+
export { OpenUiRenderer } from './renderer.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Copyright 2026 The Lynx Authors. All rights reserved.
|
|
2
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
|
+
// LICENSE file in the root directory of this source tree.
|
|
4
|
+
export { createParser, createStreamingParser } from '@openuidev/lang-core';
|
|
5
|
+
export { createOpenUiLibrary } from './createLibrary.js';
|
|
6
|
+
export { defineComponent } from './library.js';
|
|
7
|
+
export { OpenUiRenderer } from './renderer.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAS3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAUzD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ActionEvent as CoreActionEvent, DefinedComponent as CoreDefinedComponent, Library as CoreLibrary, LibraryDefinition as CoreLibraryDefinition, ComponentRenderProps as CoreRenderProps } from '@openuidev/lang-core';
|
|
2
|
+
import type { z } from 'zod/v4';
|
|
3
|
+
import type { $ZodObject } from 'zod/v4/core';
|
|
4
|
+
import type { ReactNode } from '@lynx-js/react';
|
|
5
|
+
export type { ComponentGroup, LibraryJSONSchema, PromptOptions, SubComponentOf, ToolDescriptor, } from '@openuidev/lang-core';
|
|
6
|
+
export interface ComponentRenderProps<P = Record<string, unknown>> extends CoreRenderProps<P, ReactNode> {
|
|
7
|
+
onAction?: (event: CoreActionEvent) => void;
|
|
8
|
+
}
|
|
9
|
+
export type ComponentRenderer<P = Record<string, unknown>> = React.FC<ComponentRenderProps<P>>;
|
|
10
|
+
export type DefinedComponent<T extends $ZodObject = $ZodObject> = CoreDefinedComponent<T, ComponentRenderer<z.infer<T>>>;
|
|
11
|
+
export type Library = CoreLibrary<ComponentRenderer<any>>;
|
|
12
|
+
export type LibraryDefinition = CoreLibraryDefinition<ComponentRenderer<any>>;
|
|
13
|
+
export declare function defineComponent<T extends $ZodObject>(config: {
|
|
14
|
+
name: string;
|
|
15
|
+
props: T;
|
|
16
|
+
description: string;
|
|
17
|
+
component: ComponentRenderer<z.infer<T>>;
|
|
18
|
+
}): DefinedComponent<T>;
|
|
19
|
+
export declare function createLibrary(input: LibraryDefinition): Library;
|
|
20
|
+
export type RenderOutput = JSX.Element | JSX.Element[] | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Copyright 2026 The Lynx Authors. All rights reserved.
|
|
2
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
|
+
// LICENSE file in the root directory of this source tree.
|
|
4
|
+
import { createLibrary as coreCreateLibrary, defineComponent as coreDefineComponent, } from '@openuidev/lang-core';
|
|
5
|
+
// ─── defineComponent (React) ────────────────────────────────────────────────
|
|
6
|
+
export function defineComponent(config) {
|
|
7
|
+
return coreDefineComponent(config);
|
|
8
|
+
}
|
|
9
|
+
// ─── createLibrary (React) ──────────────────────────────────────────────────
|
|
10
|
+
export function createLibrary(input) {
|
|
11
|
+
return coreCreateLibrary(input);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/core/library.tsx"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EACL,aAAa,IAAI,iBAAiB,EAClC,eAAe,IAAI,mBAAmB,GACvC,MAAM,sBAAsB,CAAC;AA4C9B,+EAA+E;AAE/E,MAAM,UAAU,eAAe,CAAuB,MAKrD;IACC,OAAO,mBAAmB,CAAmC,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,aAAa,CAAC,KAAwB;IACpD,OAAO,iBAAiB,CAAyB,KAAK,CAAY,CAAC;AACrE,CAAC"}
|