@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,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Svelte Renderer for A2R-IX
|
|
3
|
+
*
|
|
4
|
+
* Renders A2R-IX UI IR to Svelte components.
|
|
5
|
+
*/
|
|
6
|
+
import { createDefaultCatalog } from '../catalog/registry';
|
|
7
|
+
/**
|
|
8
|
+
* Create Svelte renderer
|
|
9
|
+
*/
|
|
10
|
+
export function createSvelteRenderer(config) {
|
|
11
|
+
const catalog = config.catalog ?? createDefaultCatalog();
|
|
12
|
+
const customComponents = config.components ?? {};
|
|
13
|
+
const store = config.stateStore;
|
|
14
|
+
/**
|
|
15
|
+
* Generate full Svelte component code
|
|
16
|
+
*/
|
|
17
|
+
function generateComponent(root) {
|
|
18
|
+
const script = generateScript(root);
|
|
19
|
+
const template = root.components.map((c) => generateTemplate(c)).join('\n');
|
|
20
|
+
const style = root.css ? `<style>\n${root.css}\n</style>` : '';
|
|
21
|
+
return `<script>
|
|
22
|
+
${script}
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
${template}
|
|
26
|
+
|
|
27
|
+
${style}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate script section
|
|
31
|
+
*/
|
|
32
|
+
function generateScript(root) {
|
|
33
|
+
const lines = [
|
|
34
|
+
'// Auto-generated A2R-IX Svelte component',
|
|
35
|
+
'',
|
|
36
|
+
'// State bindings',
|
|
37
|
+
];
|
|
38
|
+
// Generate state variable declarations
|
|
39
|
+
root.state.variables.forEach((variable) => {
|
|
40
|
+
const defaultValue = variable.default !== undefined
|
|
41
|
+
? JSON.stringify(variable.default)
|
|
42
|
+
: getDefaultForType(variable.type);
|
|
43
|
+
lines.push(`export let ${sanitizeName(variable.path)} = ${defaultValue};`);
|
|
44
|
+
});
|
|
45
|
+
// Generate computed values
|
|
46
|
+
lines.push('');
|
|
47
|
+
lines.push('// Computed values');
|
|
48
|
+
root.state.computed?.forEach((computed) => {
|
|
49
|
+
lines.push(`$: ${computed.name} = ${generateExpression(computed.compute)};`);
|
|
50
|
+
});
|
|
51
|
+
// Generate action handlers
|
|
52
|
+
lines.push('');
|
|
53
|
+
lines.push('// Action handlers');
|
|
54
|
+
root.actions.forEach((action) => {
|
|
55
|
+
lines.push(`function handle_${action.id}(event) {`);
|
|
56
|
+
lines.push(` dispatch('${action.id}', { event, ...${JSON.stringify(action.handler)} });`);
|
|
57
|
+
lines.push('}');
|
|
58
|
+
});
|
|
59
|
+
// Event dispatcher
|
|
60
|
+
if (root.actions.length > 0) {
|
|
61
|
+
lines.unshift("import { createEventDispatcher } from 'svelte';");
|
|
62
|
+
lines.unshift('');
|
|
63
|
+
lines.unshift('const dispatch = createEventDispatcher();');
|
|
64
|
+
}
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate template for a component
|
|
69
|
+
*/
|
|
70
|
+
function generateTemplate(component, depth = 0) {
|
|
71
|
+
const indent = ' '.repeat(depth);
|
|
72
|
+
// Handle condition
|
|
73
|
+
if (component.condition) {
|
|
74
|
+
const condition = generateExpression(component.condition);
|
|
75
|
+
const inner = generateSingleTemplate(component, depth + 1);
|
|
76
|
+
return `${indent}{#if ${condition}}\n${inner}\n${indent}{/if}`;
|
|
77
|
+
}
|
|
78
|
+
// Handle repeat
|
|
79
|
+
if (component.repeat) {
|
|
80
|
+
return generateRepeatTemplate(component, depth);
|
|
81
|
+
}
|
|
82
|
+
return generateSingleTemplate(component, depth);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate single component template (no condition/repeat)
|
|
86
|
+
*/
|
|
87
|
+
function generateSingleTemplate(component, depth) {
|
|
88
|
+
const indent = ' '.repeat(depth);
|
|
89
|
+
const tag = getComponentTag(component.type);
|
|
90
|
+
const props = generateProps(component);
|
|
91
|
+
const events = generateEvents(component);
|
|
92
|
+
const propString = [...props, ...events].join(' ');
|
|
93
|
+
if (component.children && component.children.length > 0) {
|
|
94
|
+
const children = component.children.map((c) => generateTemplate(c, depth + 1)).join('\n');
|
|
95
|
+
return `${indent}<${tag}${propString ? ' ' + propString : ''}>\n${children}\n${indent}</${tag}>`;
|
|
96
|
+
}
|
|
97
|
+
// Self-closing or with text content
|
|
98
|
+
const textContent = component.props?.children ? String(component.props.children) : '';
|
|
99
|
+
if (textContent) {
|
|
100
|
+
return `${indent}<${tag}${propString ? ' ' + propString : ''}>${textContent}</${tag}>`;
|
|
101
|
+
}
|
|
102
|
+
return `${indent}<${tag}${propString ? ' ' + propString : ''} />`;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generate repeat template
|
|
106
|
+
*/
|
|
107
|
+
function generateRepeatTemplate(component, depth) {
|
|
108
|
+
const indent = ' '.repeat(depth);
|
|
109
|
+
const repeat = component.repeat;
|
|
110
|
+
const tag = getComponentTag(component.type);
|
|
111
|
+
const props = generateProps(component);
|
|
112
|
+
const events = generateEvents(component);
|
|
113
|
+
const propString = [...props, ...events].join(' ');
|
|
114
|
+
const asVar = sanitizeName(repeat.as);
|
|
115
|
+
const indexVar = repeat.indexAs ? sanitizeName(repeat.indexAs) : 'index';
|
|
116
|
+
let eachBlock = `${indent}{#each ${sanitizeName(repeat.items)} as ${asVar}, ${indexVar}`;
|
|
117
|
+
if (repeat.filter) {
|
|
118
|
+
const filterExpr = generateExpression(repeat.filter);
|
|
119
|
+
// Note: Svelte doesn't have built-in filter, we'd need to use a computed
|
|
120
|
+
eachBlock += ` (${filterExpr})`;
|
|
121
|
+
}
|
|
122
|
+
eachBlock += '}';
|
|
123
|
+
// Generate inner content
|
|
124
|
+
let innerContent;
|
|
125
|
+
if (component.children && component.children.length > 0) {
|
|
126
|
+
const children = component.children.map((c) => generateTemplate(c, depth + 1)).join('\n');
|
|
127
|
+
innerContent = `<${tag}${propString ? ' ' + propString : ''}>\n${children}\n${indent} </${tag}>`;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
innerContent = `<${tag}${propString ? ' ' + propString : ''} />`;
|
|
131
|
+
}
|
|
132
|
+
return `${eachBlock}\n${indent} ${innerContent}\n${indent}{/each}`;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Generate props string
|
|
136
|
+
*/
|
|
137
|
+
function generateProps(component) {
|
|
138
|
+
const props = [];
|
|
139
|
+
// Regular props
|
|
140
|
+
Object.entries(component.props || {}).forEach(([key, value]) => {
|
|
141
|
+
if (key !== 'children') {
|
|
142
|
+
if (typeof value === 'string') {
|
|
143
|
+
props.push(`${key}="${escapeHtml(value)}"`);
|
|
144
|
+
}
|
|
145
|
+
else if (typeof value === 'boolean') {
|
|
146
|
+
if (value)
|
|
147
|
+
props.push(key);
|
|
148
|
+
}
|
|
149
|
+
else if (typeof value === 'number') {
|
|
150
|
+
props.push(`${key}={${value}}`);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
props.push(`${key}={${JSON.stringify(value)}}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
// Bindings
|
|
158
|
+
component.bindings?.forEach((binding) => {
|
|
159
|
+
const stateVar = sanitizeName(binding.statePath);
|
|
160
|
+
if (binding.direction === 'two-way') {
|
|
161
|
+
props.push(`bind:${binding.prop}={${stateVar}}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
props.push(`${binding.prop}={${stateVar}}`);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return props;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Generate event handlers
|
|
171
|
+
*/
|
|
172
|
+
function generateEvents(component) {
|
|
173
|
+
const events = [];
|
|
174
|
+
component.events?.forEach((event) => {
|
|
175
|
+
const handler = `handle_${event.action}`;
|
|
176
|
+
const params = event.params ? `({ ...event.detail, ...${JSON.stringify(event.params)} })` : 'event';
|
|
177
|
+
events.push(`on:${getSvelteEventName(event.event)}={() => ${handler}(${params})}`);
|
|
178
|
+
});
|
|
179
|
+
return events;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get component tag name
|
|
183
|
+
*/
|
|
184
|
+
function getComponentTag(type) {
|
|
185
|
+
// Map built-ins to HTML or custom components
|
|
186
|
+
const tagMap = {
|
|
187
|
+
Box: 'div',
|
|
188
|
+
Stack: 'div',
|
|
189
|
+
Text: 'span',
|
|
190
|
+
Heading: 'h1',
|
|
191
|
+
Paragraph: 'p',
|
|
192
|
+
Button: 'button',
|
|
193
|
+
Input: 'input',
|
|
194
|
+
TextArea: 'textarea',
|
|
195
|
+
Select: 'select',
|
|
196
|
+
Card: 'div',
|
|
197
|
+
Image: 'img',
|
|
198
|
+
Icon: 'span',
|
|
199
|
+
Badge: 'span',
|
|
200
|
+
List: 'ul',
|
|
201
|
+
Table: 'table',
|
|
202
|
+
};
|
|
203
|
+
return customComponents[type] ? type : tagMap[type] || type.toLowerCase();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Convert event name to Svelte format
|
|
207
|
+
*/
|
|
208
|
+
function getSvelteEventName(event) {
|
|
209
|
+
// Remove 'on' prefix and lowercase
|
|
210
|
+
if (event.startsWith('on')) {
|
|
211
|
+
return event.slice(2).toLowerCase();
|
|
212
|
+
}
|
|
213
|
+
return event.toLowerCase();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Generate expression string
|
|
217
|
+
*/
|
|
218
|
+
function generateExpression(expr) {
|
|
219
|
+
if (expr === null)
|
|
220
|
+
return 'null';
|
|
221
|
+
if (typeof expr === 'string')
|
|
222
|
+
return sanitizeName(expr);
|
|
223
|
+
if (typeof expr === 'number')
|
|
224
|
+
return String(expr);
|
|
225
|
+
if (typeof expr === 'boolean')
|
|
226
|
+
return String(expr);
|
|
227
|
+
// Handle expression objects
|
|
228
|
+
if (typeof expr === 'object') {
|
|
229
|
+
if ('$path' in expr) {
|
|
230
|
+
return sanitizeName(expr.$path);
|
|
231
|
+
}
|
|
232
|
+
if ('$expr' in expr) {
|
|
233
|
+
return expr.$expr;
|
|
234
|
+
}
|
|
235
|
+
if ('$cond' in expr) {
|
|
236
|
+
const [cond, trueVal, falseVal] = expr.$cond;
|
|
237
|
+
return `${generateExpression(cond)} ? ${generateExpression(trueVal)} : ${generateExpression(falseVal)}`;
|
|
238
|
+
}
|
|
239
|
+
if ('$and' in expr) {
|
|
240
|
+
const arr = expr.$and;
|
|
241
|
+
return arr.map(generateExpression).join(' && ');
|
|
242
|
+
}
|
|
243
|
+
if ('$or' in expr) {
|
|
244
|
+
const arr = expr.$or;
|
|
245
|
+
return arr.map(generateExpression).join(' || ');
|
|
246
|
+
}
|
|
247
|
+
if ('$not' in expr) {
|
|
248
|
+
return `!${generateExpression(expr.$not)}`;
|
|
249
|
+
}
|
|
250
|
+
if ('$eq' in expr) {
|
|
251
|
+
const [a, b] = expr.$eq;
|
|
252
|
+
return `${generateExpression(a)} === ${generateExpression(b)}`;
|
|
253
|
+
}
|
|
254
|
+
if ('$gt' in expr) {
|
|
255
|
+
const [a, b] = expr.$gt;
|
|
256
|
+
return `${generateExpression(a)} > ${generateExpression(b)}`;
|
|
257
|
+
}
|
|
258
|
+
if ('$lt' in expr) {
|
|
259
|
+
const [a, b] = expr.$lt;
|
|
260
|
+
return `${generateExpression(a)} < ${generateExpression(b)}`;
|
|
261
|
+
}
|
|
262
|
+
if ('$add' in expr) {
|
|
263
|
+
const [a, b] = expr.$add;
|
|
264
|
+
return `${generateExpression(a)} + ${generateExpression(b)}`;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return String(expr);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get default value for type
|
|
271
|
+
*/
|
|
272
|
+
function getDefaultForType(type) {
|
|
273
|
+
switch (type) {
|
|
274
|
+
case 'string':
|
|
275
|
+
return "''";
|
|
276
|
+
case 'number':
|
|
277
|
+
return '0';
|
|
278
|
+
case 'boolean':
|
|
279
|
+
return 'false';
|
|
280
|
+
case 'array':
|
|
281
|
+
return '[]';
|
|
282
|
+
case 'object':
|
|
283
|
+
return '{}';
|
|
284
|
+
default:
|
|
285
|
+
return 'undefined';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Sanitize variable name
|
|
290
|
+
*/
|
|
291
|
+
function sanitizeName(path) {
|
|
292
|
+
return path.replace(/\./g, '_').replace(/[^a-zA-Z0-9_]/g, '');
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Escape HTML for attributes
|
|
296
|
+
*/
|
|
297
|
+
function escapeHtml(text) {
|
|
298
|
+
return text
|
|
299
|
+
.replace(/&/g, '&')
|
|
300
|
+
.replace(/</g, '<')
|
|
301
|
+
.replace(/>/g, '>')
|
|
302
|
+
.replace(/"/g, '"')
|
|
303
|
+
.replace(/'/g, ''');
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
generateComponent,
|
|
307
|
+
generateTemplate,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Compile A2R-IX UI to Svelte component
|
|
312
|
+
*/
|
|
313
|
+
export function compileToSvelte(root, config = {}) {
|
|
314
|
+
const renderer = createSvelteRenderer(config);
|
|
315
|
+
return renderer.generateComponent(root);
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Svelte Renderer for A2R-IX
|
|
3
|
+
*
|
|
4
|
+
* Renders A2R-IX UI IR to Svelte components.
|
|
5
|
+
*/
|
|
6
|
+
import { createDefaultCatalog } from '../catalog/registry';
|
|
7
|
+
/**
|
|
8
|
+
* Create Svelte renderer
|
|
9
|
+
*/
|
|
10
|
+
export function createSvelteRenderer(config) {
|
|
11
|
+
const catalog = config.catalog ?? createDefaultCatalog();
|
|
12
|
+
const customComponents = config.components ?? {};
|
|
13
|
+
const store = config.stateStore;
|
|
14
|
+
/**
|
|
15
|
+
* Generate full Svelte component code
|
|
16
|
+
*/
|
|
17
|
+
function generateComponent(root) {
|
|
18
|
+
const script = generateScript(root);
|
|
19
|
+
const template = root.components.map((c) => generateTemplate(c)).join('\n');
|
|
20
|
+
const style = root.css ? `<style>\n${root.css}\n</style>` : '';
|
|
21
|
+
return `<script>
|
|
22
|
+
${script}
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
${template}
|
|
26
|
+
|
|
27
|
+
${style}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate script section
|
|
31
|
+
*/
|
|
32
|
+
function generateScript(root) {
|
|
33
|
+
const lines = [
|
|
34
|
+
'// Auto-generated A2R-IX Svelte component',
|
|
35
|
+
'',
|
|
36
|
+
'// State bindings',
|
|
37
|
+
];
|
|
38
|
+
// Generate state variable declarations
|
|
39
|
+
root.state.variables.forEach((variable) => {
|
|
40
|
+
const defaultValue = variable.default !== undefined
|
|
41
|
+
? JSON.stringify(variable.default)
|
|
42
|
+
: getDefaultForType(variable.type);
|
|
43
|
+
lines.push(`export let ${sanitizeName(variable.path)} = ${defaultValue};`);
|
|
44
|
+
});
|
|
45
|
+
// Generate computed values
|
|
46
|
+
lines.push('');
|
|
47
|
+
lines.push('// Computed values');
|
|
48
|
+
root.state.computed?.forEach((computed) => {
|
|
49
|
+
lines.push(`$: ${computed.name} = ${generateExpression(computed.compute)};`);
|
|
50
|
+
});
|
|
51
|
+
// Generate action handlers
|
|
52
|
+
lines.push('');
|
|
53
|
+
lines.push('// Action handlers');
|
|
54
|
+
root.actions.forEach((action) => {
|
|
55
|
+
lines.push(`function handle_${action.id}(event) {`);
|
|
56
|
+
lines.push(` dispatch('${action.id}', { event, ...${JSON.stringify(action.handler)} });`);
|
|
57
|
+
lines.push('}');
|
|
58
|
+
});
|
|
59
|
+
// Event dispatcher
|
|
60
|
+
if (root.actions.length > 0) {
|
|
61
|
+
lines.unshift("import { createEventDispatcher } from 'svelte';");
|
|
62
|
+
lines.unshift('');
|
|
63
|
+
lines.unshift('const dispatch = createEventDispatcher();');
|
|
64
|
+
}
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate template for a component
|
|
69
|
+
*/
|
|
70
|
+
function generateTemplate(component, depth = 0) {
|
|
71
|
+
const indent = ' '.repeat(depth);
|
|
72
|
+
// Handle condition
|
|
73
|
+
if (component.condition) {
|
|
74
|
+
const condition = generateExpression(component.condition);
|
|
75
|
+
const inner = generateSingleTemplate(component, depth + 1);
|
|
76
|
+
return `${indent}{#if ${condition}}\n${inner}\n${indent}{/if}`;
|
|
77
|
+
}
|
|
78
|
+
// Handle repeat
|
|
79
|
+
if (component.repeat) {
|
|
80
|
+
return generateRepeatTemplate(component, depth);
|
|
81
|
+
}
|
|
82
|
+
return generateSingleTemplate(component, depth);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate single component template (no condition/repeat)
|
|
86
|
+
*/
|
|
87
|
+
function generateSingleTemplate(component, depth) {
|
|
88
|
+
const indent = ' '.repeat(depth);
|
|
89
|
+
const tag = getComponentTag(component.type);
|
|
90
|
+
const props = generateProps(component);
|
|
91
|
+
const events = generateEvents(component);
|
|
92
|
+
const propString = [...props, ...events].join(' ');
|
|
93
|
+
if (component.children && component.children.length > 0) {
|
|
94
|
+
const children = component.children.map((c) => generateTemplate(c, depth + 1)).join('\n');
|
|
95
|
+
return `${indent}<${tag}${propString ? ' ' + propString : ''}>\n${children}\n${indent}</${tag}>`;
|
|
96
|
+
}
|
|
97
|
+
// Self-closing or with text content
|
|
98
|
+
const textContent = component.props?.children ? String(component.props.children) : '';
|
|
99
|
+
if (textContent) {
|
|
100
|
+
return `${indent}<${tag}${propString ? ' ' + propString : ''}>${textContent}</${tag}>`;
|
|
101
|
+
}
|
|
102
|
+
return `${indent}<${tag}${propString ? ' ' + propString : ''} />`;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generate repeat template
|
|
106
|
+
*/
|
|
107
|
+
function generateRepeatTemplate(component, depth) {
|
|
108
|
+
const indent = ' '.repeat(depth);
|
|
109
|
+
const repeat = component.repeat;
|
|
110
|
+
const tag = getComponentTag(component.type);
|
|
111
|
+
const props = generateProps(component);
|
|
112
|
+
const events = generateEvents(component);
|
|
113
|
+
const propString = [...props, ...events].join(' ');
|
|
114
|
+
const asVar = sanitizeName(repeat.as);
|
|
115
|
+
const indexVar = repeat.indexAs ? sanitizeName(repeat.indexAs) : 'index';
|
|
116
|
+
let eachBlock = `${indent}{#each ${sanitizeName(repeat.items)} as ${asVar}, ${indexVar}`;
|
|
117
|
+
if (repeat.filter) {
|
|
118
|
+
const filterExpr = generateExpression(repeat.filter);
|
|
119
|
+
// Note: Svelte doesn't have built-in filter, we'd need to use a computed
|
|
120
|
+
eachBlock += ` (${filterExpr})`;
|
|
121
|
+
}
|
|
122
|
+
eachBlock += '}';
|
|
123
|
+
// Generate inner content
|
|
124
|
+
let innerContent;
|
|
125
|
+
if (component.children && component.children.length > 0) {
|
|
126
|
+
const children = component.children.map((c) => generateTemplate(c, depth + 1)).join('\n');
|
|
127
|
+
innerContent = `<${tag}${propString ? ' ' + propString : ''}>\n${children}\n${indent} </${tag}>`;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
innerContent = `<${tag}${propString ? ' ' + propString : ''} />`;
|
|
131
|
+
}
|
|
132
|
+
return `${eachBlock}\n${indent} ${innerContent}\n${indent}{/each}`;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Generate props string
|
|
136
|
+
*/
|
|
137
|
+
function generateProps(component) {
|
|
138
|
+
const props = [];
|
|
139
|
+
// Regular props
|
|
140
|
+
Object.entries(component.props || {}).forEach(([key, value]) => {
|
|
141
|
+
if (key !== 'children') {
|
|
142
|
+
if (typeof value === 'string') {
|
|
143
|
+
props.push(`${key}="${escapeHtml(value)}"`);
|
|
144
|
+
}
|
|
145
|
+
else if (typeof value === 'boolean') {
|
|
146
|
+
if (value)
|
|
147
|
+
props.push(key);
|
|
148
|
+
}
|
|
149
|
+
else if (typeof value === 'number') {
|
|
150
|
+
props.push(`${key}={${value}}`);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
props.push(`${key}={${JSON.stringify(value)}}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
// Bindings
|
|
158
|
+
component.bindings?.forEach((binding) => {
|
|
159
|
+
const stateVar = sanitizeName(binding.statePath);
|
|
160
|
+
if (binding.direction === 'two-way') {
|
|
161
|
+
props.push(`bind:${binding.prop}={${stateVar}}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
props.push(`${binding.prop}={${stateVar}}`);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return props;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Generate event handlers
|
|
171
|
+
*/
|
|
172
|
+
function generateEvents(component) {
|
|
173
|
+
const events = [];
|
|
174
|
+
component.events?.forEach((event) => {
|
|
175
|
+
const handler = `handle_${event.action}`;
|
|
176
|
+
const params = event.params ? `({ ...event.detail, ...${JSON.stringify(event.params)} })` : 'event';
|
|
177
|
+
events.push(`on:${getSvelteEventName(event.event)}={() => ${handler}(${params})}`);
|
|
178
|
+
});
|
|
179
|
+
return events;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get component tag name
|
|
183
|
+
*/
|
|
184
|
+
function getComponentTag(type) {
|
|
185
|
+
// Map built-ins to HTML or custom components
|
|
186
|
+
const tagMap = {
|
|
187
|
+
Box: 'div',
|
|
188
|
+
Stack: 'div',
|
|
189
|
+
Text: 'span',
|
|
190
|
+
Heading: 'h1',
|
|
191
|
+
Paragraph: 'p',
|
|
192
|
+
Button: 'button',
|
|
193
|
+
Input: 'input',
|
|
194
|
+
TextArea: 'textarea',
|
|
195
|
+
Select: 'select',
|
|
196
|
+
Card: 'div',
|
|
197
|
+
Image: 'img',
|
|
198
|
+
Icon: 'span',
|
|
199
|
+
Badge: 'span',
|
|
200
|
+
List: 'ul',
|
|
201
|
+
Table: 'table',
|
|
202
|
+
};
|
|
203
|
+
return customComponents[type] ? type : tagMap[type] || type.toLowerCase();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Convert event name to Svelte format
|
|
207
|
+
*/
|
|
208
|
+
function getSvelteEventName(event) {
|
|
209
|
+
// Remove 'on' prefix and lowercase
|
|
210
|
+
if (event.startsWith('on')) {
|
|
211
|
+
return event.slice(2).toLowerCase();
|
|
212
|
+
}
|
|
213
|
+
return event.toLowerCase();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Generate expression string
|
|
217
|
+
*/
|
|
218
|
+
function generateExpression(expr) {
|
|
219
|
+
if (expr === null)
|
|
220
|
+
return 'null';
|
|
221
|
+
if (typeof expr === 'string')
|
|
222
|
+
return sanitizeName(expr);
|
|
223
|
+
if (typeof expr === 'number')
|
|
224
|
+
return String(expr);
|
|
225
|
+
if (typeof expr === 'boolean')
|
|
226
|
+
return String(expr);
|
|
227
|
+
// Handle expression objects
|
|
228
|
+
if (typeof expr === 'object') {
|
|
229
|
+
if ('$path' in expr) {
|
|
230
|
+
return sanitizeName(expr.$path);
|
|
231
|
+
}
|
|
232
|
+
if ('$expr' in expr) {
|
|
233
|
+
return expr.$expr;
|
|
234
|
+
}
|
|
235
|
+
if ('$cond' in expr) {
|
|
236
|
+
const [cond, trueVal, falseVal] = expr.$cond;
|
|
237
|
+
return `${generateExpression(cond)} ? ${generateExpression(trueVal)} : ${generateExpression(falseVal)}`;
|
|
238
|
+
}
|
|
239
|
+
if ('$and' in expr) {
|
|
240
|
+
const arr = expr.$and;
|
|
241
|
+
return arr.map(generateExpression).join(' && ');
|
|
242
|
+
}
|
|
243
|
+
if ('$or' in expr) {
|
|
244
|
+
const arr = expr.$or;
|
|
245
|
+
return arr.map(generateExpression).join(' || ');
|
|
246
|
+
}
|
|
247
|
+
if ('$not' in expr) {
|
|
248
|
+
return `!${generateExpression(expr.$not)}`;
|
|
249
|
+
}
|
|
250
|
+
if ('$eq' in expr) {
|
|
251
|
+
const [a, b] = expr.$eq;
|
|
252
|
+
return `${generateExpression(a)} === ${generateExpression(b)}`;
|
|
253
|
+
}
|
|
254
|
+
if ('$gt' in expr) {
|
|
255
|
+
const [a, b] = expr.$gt;
|
|
256
|
+
return `${generateExpression(a)} > ${generateExpression(b)}`;
|
|
257
|
+
}
|
|
258
|
+
if ('$lt' in expr) {
|
|
259
|
+
const [a, b] = expr.$lt;
|
|
260
|
+
return `${generateExpression(a)} < ${generateExpression(b)}`;
|
|
261
|
+
}
|
|
262
|
+
if ('$add' in expr) {
|
|
263
|
+
const [a, b] = expr.$add;
|
|
264
|
+
return `${generateExpression(a)} + ${generateExpression(b)}`;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return String(expr);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get default value for type
|
|
271
|
+
*/
|
|
272
|
+
function getDefaultForType(type) {
|
|
273
|
+
switch (type) {
|
|
274
|
+
case 'string':
|
|
275
|
+
return "''";
|
|
276
|
+
case 'number':
|
|
277
|
+
return '0';
|
|
278
|
+
case 'boolean':
|
|
279
|
+
return 'false';
|
|
280
|
+
case 'array':
|
|
281
|
+
return '[]';
|
|
282
|
+
case 'object':
|
|
283
|
+
return '{}';
|
|
284
|
+
default:
|
|
285
|
+
return 'undefined';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Sanitize variable name
|
|
290
|
+
*/
|
|
291
|
+
function sanitizeName(path) {
|
|
292
|
+
return path.replace(/\./g, '_').replace(/[^a-zA-Z0-9_]/g, '');
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Escape HTML for attributes
|
|
296
|
+
*/
|
|
297
|
+
function escapeHtml(text) {
|
|
298
|
+
return text
|
|
299
|
+
.replace(/&/g, '&')
|
|
300
|
+
.replace(/</g, '<')
|
|
301
|
+
.replace(/>/g, '>')
|
|
302
|
+
.replace(/"/g, '"')
|
|
303
|
+
.replace(/'/g, ''');
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
generateComponent,
|
|
307
|
+
generateTemplate,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Compile A2R-IX UI to Svelte component
|
|
312
|
+
*/
|
|
313
|
+
export function compileToSvelte(root, config = {}) {
|
|
314
|
+
const renderer = createSvelteRenderer(config);
|
|
315
|
+
return renderer.generateComponent(root);
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/svelte/renderer.ts"],"names":[],"mappings":"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"}
|