@allternit/ix 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +320 -0
- package/dist/adapters/json-render.d.ts +211 -0
- package/dist/adapters/json-render.d.ts.bak +211 -0
- package/dist/adapters/json-render.d.ts.map +1 -0
- package/dist/adapters/json-render.js +576 -0
- package/dist/adapters/json-render.js.bak +576 -0
- package/dist/adapters/json-render.js.map +1 -0
- package/dist/catalog/registry.d.ts +65 -0
- package/dist/catalog/registry.d.ts.bak +65 -0
- package/dist/catalog/registry.d.ts.map +1 -0
- package/dist/catalog/registry.js +388 -0
- package/dist/catalog/registry.js.bak +388 -0
- package/dist/catalog/registry.js.map +1 -0
- package/dist/collab/capsule-registry.d.ts +114 -0
- package/dist/collab/capsule-registry.d.ts.bak +114 -0
- package/dist/collab/capsule-registry.d.ts.map +1 -0
- package/dist/collab/capsule-registry.js +271 -0
- package/dist/collab/capsule-registry.js.bak +271 -0
- package/dist/collab/capsule-registry.js.map +1 -0
- package/dist/collab/index.d.ts +21 -0
- package/dist/collab/index.d.ts.bak +21 -0
- package/dist/collab/index.d.ts.map +1 -0
- package/dist/collab/index.js +32 -0
- package/dist/collab/index.js.bak +32 -0
- package/dist/collab/index.js.map +1 -0
- package/dist/collab/visual-editor.d.ts +199 -0
- package/dist/collab/visual-editor.d.ts.bak +199 -0
- package/dist/collab/visual-editor.d.ts.map +1 -0
- package/dist/collab/visual-editor.js +259 -0
- package/dist/collab/visual-editor.js.bak +259 -0
- package/dist/collab/visual-editor.js.map +1 -0
- package/dist/collab/yjs-adapter.d.ts +95 -0
- package/dist/collab/yjs-adapter.d.ts.bak +95 -0
- package/dist/collab/yjs-adapter.d.ts.map +1 -0
- package/dist/collab/yjs-adapter.js +282 -0
- package/dist/collab/yjs-adapter.js.bak +282 -0
- package/dist/collab/yjs-adapter.js.map +1 -0
- package/dist/collab/yjs-client.d.ts +101 -0
- package/dist/collab/yjs-client.d.ts.bak +101 -0
- package/dist/collab/yjs-client.d.ts.map +1 -0
- package/dist/collab/yjs-client.js +193 -0
- package/dist/collab/yjs-client.js.bak +193 -0
- package/dist/collab/yjs-client.js.map +1 -0
- package/dist/collab/yjs-protocols.d.ts +128 -0
- package/dist/collab/yjs-protocols.d.ts.bak +128 -0
- package/dist/collab/yjs-protocols.d.ts.map +1 -0
- package/dist/collab/yjs-protocols.js +245 -0
- package/dist/collab/yjs-protocols.js.bak +245 -0
- package/dist/collab/yjs-protocols.js.map +1 -0
- package/dist/collab/yjs-types.d.ts +201 -0
- package/dist/collab/yjs-types.d.ts.bak +201 -0
- package/dist/collab/yjs-types.d.ts.map +1 -0
- package/dist/collab/yjs-types.js +45 -0
- package/dist/collab/yjs-types.js.bak +45 -0
- package/dist/collab/yjs-types.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.bak +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.bak +48 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline/llm-to-ix.d.ts +249 -0
- package/dist/pipeline/llm-to-ix.d.ts.bak +249 -0
- package/dist/pipeline/llm-to-ix.d.ts.map +1 -0
- package/dist/pipeline/llm-to-ix.js +992 -0
- package/dist/pipeline/llm-to-ix.js.bak +992 -0
- package/dist/pipeline/llm-to-ix.js.map +1 -0
- package/dist/react/index.d.ts +18 -0
- package/dist/react/index.d.ts.bak +18 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +18 -0
- package/dist/react/index.js.bak +18 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/renderer.d.ts +47 -0
- package/dist/react/renderer.d.ts.bak +47 -0
- package/dist/react/renderer.d.ts.map +1 -0
- package/dist/react/renderer.js +420 -0
- package/dist/react/renderer.js.bak +420 -0
- package/dist/react/renderer.js.map +1 -0
- package/dist/renderer/renderer.d.ts +55 -0
- package/dist/renderer/renderer.d.ts.bak +55 -0
- package/dist/renderer/renderer.d.ts.map +1 -0
- package/dist/renderer/renderer.js +232 -0
- package/dist/renderer/renderer.js.bak +232 -0
- package/dist/renderer/renderer.js.map +1 -0
- package/dist/runtime/capsule-runtime.d.ts +227 -0
- package/dist/runtime/capsule-runtime.d.ts.bak +227 -0
- package/dist/runtime/capsule-runtime.d.ts.map +1 -0
- package/dist/runtime/capsule-runtime.js +563 -0
- package/dist/runtime/capsule-runtime.js.bak +563 -0
- package/dist/runtime/capsule-runtime.js.map +1 -0
- package/dist/runtime/policy-gates.d.ts +116 -0
- package/dist/runtime/policy-gates.d.ts.bak +116 -0
- package/dist/runtime/policy-gates.d.ts.map +1 -0
- package/dist/runtime/policy-gates.js +317 -0
- package/dist/runtime/policy-gates.js.bak +317 -0
- package/dist/runtime/policy-gates.js.map +1 -0
- package/dist/schema/ui-ir.d.ts +26 -0
- package/dist/schema/ui-ir.d.ts.bak +26 -0
- package/dist/schema/ui-ir.d.ts.map +1 -0
- package/dist/schema/ui-ir.js +51 -0
- package/dist/schema/ui-ir.js.bak +51 -0
- package/dist/schema/ui-ir.js.map +1 -0
- package/dist/sdk/api.d.ts +101 -0
- package/dist/sdk/api.d.ts.bak +101 -0
- package/dist/sdk/api.d.ts.map +1 -0
- package/dist/sdk/api.js +177 -0
- package/dist/sdk/api.js.bak +177 -0
- package/dist/sdk/api.js.map +1 -0
- package/dist/sdk/index.d.ts +9 -0
- package/dist/sdk/index.d.ts.bak +9 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +10 -0
- package/dist/sdk/index.js.bak +10 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/react.d.ts +63 -0
- package/dist/sdk/react.d.ts.bak +63 -0
- package/dist/sdk/react.d.ts.map +1 -0
- package/dist/sdk/react.js +161 -0
- package/dist/sdk/react.js.bak +161 -0
- package/dist/sdk/react.js.map +1 -0
- package/dist/state/index.d.ts +8 -0
- package/dist/state/index.d.ts.bak +8 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +8 -0
- package/dist/state/index.js.bak +8 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/patch.d.ts +73 -0
- package/dist/state/patch.d.ts.bak +73 -0
- package/dist/state/patch.d.ts.map +1 -0
- package/dist/state/patch.js +437 -0
- package/dist/state/patch.js.bak +437 -0
- package/dist/state/patch.js.map +1 -0
- package/dist/state/store.d.ts +50 -0
- package/dist/state/store.d.ts.bak +50 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +246 -0
- package/dist/state/store.js.bak +246 -0
- package/dist/state/store.js.map +1 -0
- package/dist/svelte/index.d.ts +15 -0
- package/dist/svelte/index.d.ts.bak +15 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +15 -0
- package/dist/svelte/index.js.bak +15 -0
- package/dist/svelte/index.js.map +1 -0
- package/dist/svelte/renderer.d.ts +35 -0
- package/dist/svelte/renderer.d.ts.bak +35 -0
- package/dist/svelte/renderer.d.ts.map +1 -0
- package/dist/svelte/renderer.js +317 -0
- package/dist/svelte/renderer.js.bak +317 -0
- package/dist/svelte/renderer.js.map +1 -0
- package/dist/types/index.d.ts +349 -0
- package/dist/types/index.d.ts.bak +349 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +152 -0
- package/dist/types/index.js.bak +152 -0
- package/dist/types/index.js.map +1 -0
- package/dist/vue/index.d.ts +18 -0
- package/dist/vue/index.d.ts.bak +18 -0
- package/dist/vue/index.d.ts.map +1 -0
- package/dist/vue/index.js +18 -0
- package/dist/vue/index.js.bak +18 -0
- package/dist/vue/index.js.map +1 -0
- package/dist/vue/renderer.d.ts +46 -0
- package/dist/vue/renderer.d.ts.bak +46 -0
- package/dist/vue/renderer.d.ts.map +1 -0
- package/dist/vue/renderer.js +302 -0
- package/dist/vue/renderer.js.bak +302 -0
- package/dist/vue/renderer.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Renderer
|
|
3
|
+
*
|
|
4
|
+
* Core renderer for A2R-IX UI IR. Platform-agnostic base that delegates
|
|
5
|
+
to platform-specific renderers (React, Vue, etc.).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create UI renderer
|
|
9
|
+
*/
|
|
10
|
+
export function createUIRenderer(config) {
|
|
11
|
+
let currentRoot = null;
|
|
12
|
+
let currentContainer = null;
|
|
13
|
+
let destroyed = false;
|
|
14
|
+
const stateStore = config.stateStore;
|
|
15
|
+
const catalog = config.catalog;
|
|
16
|
+
const platform = config.platform;
|
|
17
|
+
function render(root, container) {
|
|
18
|
+
if (destroyed) {
|
|
19
|
+
throw new Error('Renderer has been destroyed');
|
|
20
|
+
}
|
|
21
|
+
currentRoot = root;
|
|
22
|
+
currentContainer = container;
|
|
23
|
+
// Initialize state
|
|
24
|
+
if (stateStore && root.state?.initial) {
|
|
25
|
+
Object.entries(root.state.initial).forEach(([path, value]) => {
|
|
26
|
+
stateStore.set(path, value);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// Render component tree
|
|
30
|
+
const elements = root.components.map((comp) => renderComponent(comp));
|
|
31
|
+
const rootElement = platform.createElement('Fragment', {}, elements);
|
|
32
|
+
platform.render(rootElement, container);
|
|
33
|
+
}
|
|
34
|
+
function renderComponent(component, context) {
|
|
35
|
+
try {
|
|
36
|
+
// Validate component against catalog
|
|
37
|
+
if (catalog && !catalog.validate(component.type, component.props)) {
|
|
38
|
+
throw new Error(`Invalid props for component type: ${component.type}`);
|
|
39
|
+
}
|
|
40
|
+
// Build props with context evaluation
|
|
41
|
+
const props = {};
|
|
42
|
+
if (component.props) {
|
|
43
|
+
Object.entries(component.props).forEach(([key, value]) => {
|
|
44
|
+
props[key] = evaluateValue(value, context || {});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Add bindings
|
|
48
|
+
if (component.bindings && stateStore) {
|
|
49
|
+
component.bindings.forEach((binding) => {
|
|
50
|
+
const value = stateStore.get(binding.statePath);
|
|
51
|
+
props[binding.prop] = value;
|
|
52
|
+
if (binding.direction === 'two-way') {
|
|
53
|
+
// Add onChange handler
|
|
54
|
+
props[`on${capitalize(binding.prop)}Change`] = (newValue) => {
|
|
55
|
+
stateStore.set(binding.statePath, newValue);
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Add event handlers
|
|
61
|
+
if (component.events) {
|
|
62
|
+
component.events.forEach((event) => {
|
|
63
|
+
props[event.event] = (...args) => {
|
|
64
|
+
handleEvent(event.action, event.params, args);
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// Render children
|
|
69
|
+
let children = [];
|
|
70
|
+
if (component.children) {
|
|
71
|
+
children = component.children.map(child => renderComponent(child, context));
|
|
72
|
+
}
|
|
73
|
+
// Handle repeat
|
|
74
|
+
if (component.repeat && stateStore) {
|
|
75
|
+
const items = stateStore.get(component.repeat.items) || [];
|
|
76
|
+
children = items.map((item, index) => {
|
|
77
|
+
const itemContext = {
|
|
78
|
+
...context,
|
|
79
|
+
[component.repeat.as]: item,
|
|
80
|
+
...(component.repeat.indexAs ? { [component.repeat.indexAs]: index } : {}),
|
|
81
|
+
};
|
|
82
|
+
return renderComponent(component.children?.[0] || { id: generateId(), type: 'Fragment', props: {} }, itemContext);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// Add key/id
|
|
86
|
+
props.key = component.id;
|
|
87
|
+
// Create element
|
|
88
|
+
return platform.createElement(component.type, props, children);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
config.onError?.(error, component.id);
|
|
92
|
+
return platform.createElement('ErrorBoundary', { error }, []);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function handleEvent(actionId, params, eventArgs) {
|
|
96
|
+
if (!currentRoot)
|
|
97
|
+
return;
|
|
98
|
+
const action = currentRoot.actions.find((a) => a.id === actionId);
|
|
99
|
+
if (!action) {
|
|
100
|
+
config.onError?.(new Error(`Action not found: ${actionId}`));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
executeAction(action, params, eventArgs);
|
|
104
|
+
}
|
|
105
|
+
function executeAction(action, params, eventArgs) {
|
|
106
|
+
const { handler } = action;
|
|
107
|
+
switch (handler.type) {
|
|
108
|
+
case 'setState': {
|
|
109
|
+
if (stateStore) {
|
|
110
|
+
// Evaluate value expression with params and event
|
|
111
|
+
const context = { params, event: eventArgs[0], ...stateStore.snapshot() };
|
|
112
|
+
const value = evaluateValue(handler.value, context);
|
|
113
|
+
stateStore.set(handler.path, value);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case 'emitEvent': {
|
|
118
|
+
const context = { params, event: eventArgs[0], ...stateStore?.snapshot() };
|
|
119
|
+
const payload = evaluateValue(handler.payload, context);
|
|
120
|
+
config.onEvent?.(handler.name, payload);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
case 'navigate': {
|
|
124
|
+
// Navigation handled by platform
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'validate': {
|
|
128
|
+
// Validation logic
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'custom': {
|
|
132
|
+
config.onEvent?.(action.id, { params, event: eventArgs[0] });
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function update(patch) {
|
|
138
|
+
if (!stateStore || destroyed)
|
|
139
|
+
return;
|
|
140
|
+
// Apply patch to state
|
|
141
|
+
const snapshot = stateStore.snapshot();
|
|
142
|
+
patch.forEach((op) => {
|
|
143
|
+
if (op.op === 'add' || op.op === 'replace') {
|
|
144
|
+
const path = op.path.slice(1).replace(/\//g, '.');
|
|
145
|
+
stateStore.set(path, op.value);
|
|
146
|
+
}
|
|
147
|
+
else if (op.op === 'remove') {
|
|
148
|
+
const path = op.path.slice(1).replace(/\//g, '.');
|
|
149
|
+
stateStore.set(path, undefined);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
// Re-render if needed
|
|
153
|
+
if (currentRoot && currentContainer) {
|
|
154
|
+
render(currentRoot, currentContainer);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function dispatch(actionId, params) {
|
|
158
|
+
handleEvent(actionId, params, []);
|
|
159
|
+
}
|
|
160
|
+
function getState(path) {
|
|
161
|
+
if (!stateStore)
|
|
162
|
+
return undefined;
|
|
163
|
+
return path ? stateStore.get(path) : stateStore.snapshot();
|
|
164
|
+
}
|
|
165
|
+
function setState(path, value) {
|
|
166
|
+
stateStore?.set(path, value);
|
|
167
|
+
}
|
|
168
|
+
function subscribe(path, callback) {
|
|
169
|
+
if (!stateStore)
|
|
170
|
+
return () => { };
|
|
171
|
+
return stateStore.subscribe(path, callback);
|
|
172
|
+
}
|
|
173
|
+
function destroy() {
|
|
174
|
+
if (currentContainer) {
|
|
175
|
+
platform.unmount(currentContainer);
|
|
176
|
+
}
|
|
177
|
+
destroyed = true;
|
|
178
|
+
currentRoot = null;
|
|
179
|
+
currentContainer = null;
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
render,
|
|
183
|
+
update,
|
|
184
|
+
dispatch,
|
|
185
|
+
getState,
|
|
186
|
+
setState,
|
|
187
|
+
subscribe,
|
|
188
|
+
destroy,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Evaluate value expression
|
|
193
|
+
*/
|
|
194
|
+
function evaluateValue(value, context) {
|
|
195
|
+
if (value === null || typeof value !== 'object') {
|
|
196
|
+
return value;
|
|
197
|
+
}
|
|
198
|
+
if ('$path' in value) {
|
|
199
|
+
const path = value.$path;
|
|
200
|
+
return path.split('.').reduce((acc, key) => {
|
|
201
|
+
if (acc && typeof acc === 'object') {
|
|
202
|
+
return acc[key];
|
|
203
|
+
}
|
|
204
|
+
return undefined;
|
|
205
|
+
}, context);
|
|
206
|
+
}
|
|
207
|
+
if ('$expr' in value) {
|
|
208
|
+
const expr = value.$expr;
|
|
209
|
+
try {
|
|
210
|
+
// Simple expression evaluation
|
|
211
|
+
const fn = new Function('context', `with(context) { return ${expr}; }`);
|
|
212
|
+
return fn(context);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return value;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Generate unique ID
|
|
222
|
+
*/
|
|
223
|
+
function generateId() {
|
|
224
|
+
return `comp_${Math.random().toString(36).substr(2, 9)}`;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Capitalize string
|
|
228
|
+
*/
|
|
229
|
+
function capitalize(str) {
|
|
230
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Renderer
|
|
3
|
+
*
|
|
4
|
+
* Core renderer for A2R-IX UI IR. Platform-agnostic base that delegates
|
|
5
|
+
to platform-specific renderers (React, Vue, etc.).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create UI renderer
|
|
9
|
+
*/
|
|
10
|
+
export function createUIRenderer(config) {
|
|
11
|
+
let currentRoot = null;
|
|
12
|
+
let currentContainer = null;
|
|
13
|
+
let destroyed = false;
|
|
14
|
+
const stateStore = config.stateStore;
|
|
15
|
+
const catalog = config.catalog;
|
|
16
|
+
const platform = config.platform;
|
|
17
|
+
function render(root, container) {
|
|
18
|
+
if (destroyed) {
|
|
19
|
+
throw new Error('Renderer has been destroyed');
|
|
20
|
+
}
|
|
21
|
+
currentRoot = root;
|
|
22
|
+
currentContainer = container;
|
|
23
|
+
// Initialize state
|
|
24
|
+
if (stateStore && root.state?.initial) {
|
|
25
|
+
Object.entries(root.state.initial).forEach(([path, value]) => {
|
|
26
|
+
stateStore.set(path, value);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// Render component tree
|
|
30
|
+
const elements = root.components.map((comp) => renderComponent(comp));
|
|
31
|
+
const rootElement = platform.createElement('Fragment', {}, elements);
|
|
32
|
+
platform.render(rootElement, container);
|
|
33
|
+
}
|
|
34
|
+
function renderComponent(component, context) {
|
|
35
|
+
try {
|
|
36
|
+
// Validate component against catalog
|
|
37
|
+
if (catalog && !catalog.validate(component.type, component.props)) {
|
|
38
|
+
throw new Error(`Invalid props for component type: ${component.type}`);
|
|
39
|
+
}
|
|
40
|
+
// Build props with context evaluation
|
|
41
|
+
const props = {};
|
|
42
|
+
if (component.props) {
|
|
43
|
+
Object.entries(component.props).forEach(([key, value]) => {
|
|
44
|
+
props[key] = evaluateValue(value, context || {});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Add bindings
|
|
48
|
+
if (component.bindings && stateStore) {
|
|
49
|
+
component.bindings.forEach((binding) => {
|
|
50
|
+
const value = stateStore.get(binding.statePath);
|
|
51
|
+
props[binding.prop] = value;
|
|
52
|
+
if (binding.direction === 'two-way') {
|
|
53
|
+
// Add onChange handler
|
|
54
|
+
props[`on${capitalize(binding.prop)}Change`] = (newValue) => {
|
|
55
|
+
stateStore.set(binding.statePath, newValue);
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Add event handlers
|
|
61
|
+
if (component.events) {
|
|
62
|
+
component.events.forEach((event) => {
|
|
63
|
+
props[event.event] = (...args) => {
|
|
64
|
+
handleEvent(event.action, event.params, args);
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// Render children
|
|
69
|
+
let children = [];
|
|
70
|
+
if (component.children) {
|
|
71
|
+
children = component.children.map(child => renderComponent(child, context));
|
|
72
|
+
}
|
|
73
|
+
// Handle repeat
|
|
74
|
+
if (component.repeat && stateStore) {
|
|
75
|
+
const items = stateStore.get(component.repeat.items) || [];
|
|
76
|
+
children = items.map((item, index) => {
|
|
77
|
+
const itemContext = {
|
|
78
|
+
...context,
|
|
79
|
+
[component.repeat.as]: item,
|
|
80
|
+
...(component.repeat.indexAs ? { [component.repeat.indexAs]: index } : {}),
|
|
81
|
+
};
|
|
82
|
+
return renderComponent(component.children?.[0] || { id: generateId(), type: 'Fragment', props: {} }, itemContext);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// Add key/id
|
|
86
|
+
props.key = component.id;
|
|
87
|
+
// Create element
|
|
88
|
+
return platform.createElement(component.type, props, children);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
config.onError?.(error, component.id);
|
|
92
|
+
return platform.createElement('ErrorBoundary', { error }, []);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function handleEvent(actionId, params, eventArgs) {
|
|
96
|
+
if (!currentRoot)
|
|
97
|
+
return;
|
|
98
|
+
const action = currentRoot.actions.find((a) => a.id === actionId);
|
|
99
|
+
if (!action) {
|
|
100
|
+
config.onError?.(new Error(`Action not found: ${actionId}`));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
executeAction(action, params, eventArgs);
|
|
104
|
+
}
|
|
105
|
+
function executeAction(action, params, eventArgs) {
|
|
106
|
+
const { handler } = action;
|
|
107
|
+
switch (handler.type) {
|
|
108
|
+
case 'setState': {
|
|
109
|
+
if (stateStore) {
|
|
110
|
+
// Evaluate value expression with params and event
|
|
111
|
+
const context = { params, event: eventArgs[0], ...stateStore.snapshot() };
|
|
112
|
+
const value = evaluateValue(handler.value, context);
|
|
113
|
+
stateStore.set(handler.path, value);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case 'emitEvent': {
|
|
118
|
+
const context = { params, event: eventArgs[0], ...stateStore?.snapshot() };
|
|
119
|
+
const payload = evaluateValue(handler.payload, context);
|
|
120
|
+
config.onEvent?.(handler.name, payload);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
case 'navigate': {
|
|
124
|
+
// Navigation handled by platform
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'validate': {
|
|
128
|
+
// Validation logic
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'custom': {
|
|
132
|
+
config.onEvent?.(action.id, { params, event: eventArgs[0] });
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function update(patch) {
|
|
138
|
+
if (!stateStore || destroyed)
|
|
139
|
+
return;
|
|
140
|
+
// Apply patch to state
|
|
141
|
+
const snapshot = stateStore.snapshot();
|
|
142
|
+
patch.forEach((op) => {
|
|
143
|
+
if (op.op === 'add' || op.op === 'replace') {
|
|
144
|
+
const path = op.path.slice(1).replace(/\//g, '.');
|
|
145
|
+
stateStore.set(path, op.value);
|
|
146
|
+
}
|
|
147
|
+
else if (op.op === 'remove') {
|
|
148
|
+
const path = op.path.slice(1).replace(/\//g, '.');
|
|
149
|
+
stateStore.set(path, undefined);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
// Re-render if needed
|
|
153
|
+
if (currentRoot && currentContainer) {
|
|
154
|
+
render(currentRoot, currentContainer);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function dispatch(actionId, params) {
|
|
158
|
+
handleEvent(actionId, params, []);
|
|
159
|
+
}
|
|
160
|
+
function getState(path) {
|
|
161
|
+
if (!stateStore)
|
|
162
|
+
return undefined;
|
|
163
|
+
return path ? stateStore.get(path) : stateStore.snapshot();
|
|
164
|
+
}
|
|
165
|
+
function setState(path, value) {
|
|
166
|
+
stateStore?.set(path, value);
|
|
167
|
+
}
|
|
168
|
+
function subscribe(path, callback) {
|
|
169
|
+
if (!stateStore)
|
|
170
|
+
return () => { };
|
|
171
|
+
return stateStore.subscribe(path, callback);
|
|
172
|
+
}
|
|
173
|
+
function destroy() {
|
|
174
|
+
if (currentContainer) {
|
|
175
|
+
platform.unmount(currentContainer);
|
|
176
|
+
}
|
|
177
|
+
destroyed = true;
|
|
178
|
+
currentRoot = null;
|
|
179
|
+
currentContainer = null;
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
render,
|
|
183
|
+
update,
|
|
184
|
+
dispatch,
|
|
185
|
+
getState,
|
|
186
|
+
setState,
|
|
187
|
+
subscribe,
|
|
188
|
+
destroy,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Evaluate value expression
|
|
193
|
+
*/
|
|
194
|
+
function evaluateValue(value, context) {
|
|
195
|
+
if (value === null || typeof value !== 'object') {
|
|
196
|
+
return value;
|
|
197
|
+
}
|
|
198
|
+
if ('$path' in value) {
|
|
199
|
+
const path = value.$path;
|
|
200
|
+
return path.split('.').reduce((acc, key) => {
|
|
201
|
+
if (acc && typeof acc === 'object') {
|
|
202
|
+
return acc[key];
|
|
203
|
+
}
|
|
204
|
+
return undefined;
|
|
205
|
+
}, context);
|
|
206
|
+
}
|
|
207
|
+
if ('$expr' in value) {
|
|
208
|
+
const expr = value.$expr;
|
|
209
|
+
try {
|
|
210
|
+
// Simple expression evaluation
|
|
211
|
+
const fn = new Function('context', `with(context) { return ${expr}; }`);
|
|
212
|
+
return fn(context);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return value;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Generate unique ID
|
|
222
|
+
*/
|
|
223
|
+
function generateId() {
|
|
224
|
+
return `comp_${Math.random().toString(36).substr(2, 9)}`;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Capitalize string
|
|
228
|
+
*/
|
|
229
|
+
function capitalize(str) {
|
|
230
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer/renderer.ts"],"names":[],"mappings":"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"}
|