@allternit/ix 0.1.0 → 0.1.1
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 +6 -6
- package/dist/adapters/json-render.d.ts +5 -5
- package/dist/adapters/json-render.js +12 -12
- package/dist/collab/visual-editor.d.ts +1 -1
- package/dist/collab/visual-editor.js +4 -4
- package/dist/collab/visual-editor.js.map +1 -1
- package/dist/collab/yjs-adapter.d.ts +1 -1
- package/dist/collab/yjs-adapter.js +2 -2
- package/dist/collab/yjs-adapter.js.map +1 -1
- package/dist/collab/yjs-client.js +1 -1
- package/dist/collab/yjs-client.js.map +1 -1
- package/dist/collab/yjs-types.js +1 -1
- package/dist/collab/yjs-types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/pipeline/llm-to-ix.d.ts +5 -5
- package/dist/pipeline/llm-to-ix.d.ts.map +1 -1
- package/dist/pipeline/llm-to-ix.js +6 -6
- package/dist/react/renderer.d.ts +2 -2
- package/dist/react/renderer.js +3 -3
- package/dist/react/renderer.js.map +1 -1
- package/dist/renderer/renderer.d.ts +1 -1
- package/dist/renderer/renderer.js +1 -1
- package/dist/runtime/capsule-runtime.d.ts +1 -1
- package/dist/runtime/capsule-runtime.js +1 -1
- package/dist/sdk/api.d.ts +3 -3
- package/dist/sdk/api.js +3 -3
- package/dist/sdk/index.d.ts +2 -2
- package/dist/sdk/index.js +2 -2
- package/dist/sdk/react.d.ts +2 -2
- package/dist/sdk/react.js +2 -2
- package/dist/state/index.d.ts +1 -1
- package/dist/state/index.js +1 -1
- package/dist/state/store.d.ts +1 -1
- package/dist/state/store.js +3 -3
- package/dist/state/store.js.map +1 -1
- package/dist/svelte/index.d.ts +1 -1
- package/dist/svelte/index.js +1 -1
- package/dist/svelte/renderer.d.ts +3 -3
- package/dist/svelte/renderer.js +4 -4
- package/dist/svelte/renderer.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js +1 -1
- package/dist/vue/renderer.d.ts +3 -3
- package/dist/vue/renderer.js +5 -5
- package/dist/vue/renderer.js.map +1 -1
- package/package.json +8 -8
- package/dist/adapters/json-render.d.ts.bak +0 -211
- package/dist/adapters/json-render.js.bak +0 -576
- package/dist/catalog/registry.d.ts.bak +0 -65
- package/dist/catalog/registry.js.bak +0 -388
- package/dist/collab/capsule-registry.d.ts.bak +0 -114
- package/dist/collab/capsule-registry.js.bak +0 -271
- package/dist/collab/index.d.ts.bak +0 -21
- package/dist/collab/index.js.bak +0 -32
- package/dist/collab/visual-editor.d.ts.bak +0 -199
- package/dist/collab/visual-editor.js.bak +0 -259
- package/dist/collab/yjs-adapter.d.ts.bak +0 -95
- package/dist/collab/yjs-adapter.js.bak +0 -282
- package/dist/collab/yjs-client.d.ts.bak +0 -101
- package/dist/collab/yjs-client.js.bak +0 -193
- package/dist/collab/yjs-protocols.d.ts.bak +0 -128
- package/dist/collab/yjs-protocols.js.bak +0 -245
- package/dist/collab/yjs-types.d.ts.bak +0 -201
- package/dist/collab/yjs-types.js.bak +0 -45
- package/dist/index.d.ts.bak +0 -38
- package/dist/index.js.bak +0 -48
- package/dist/pipeline/llm-to-ix.d.ts.bak +0 -249
- package/dist/pipeline/llm-to-ix.js.bak +0 -992
- package/dist/react/index.d.ts.bak +0 -18
- package/dist/react/index.js.bak +0 -18
- package/dist/react/renderer.d.ts.bak +0 -47
- package/dist/react/renderer.js.bak +0 -420
- package/dist/renderer/renderer.d.ts.bak +0 -55
- package/dist/renderer/renderer.js.bak +0 -232
- package/dist/runtime/capsule-runtime.d.ts.bak +0 -227
- package/dist/runtime/capsule-runtime.js.bak +0 -563
- package/dist/runtime/policy-gates.d.ts.bak +0 -116
- package/dist/runtime/policy-gates.js.bak +0 -317
- package/dist/schema/ui-ir.d.ts.bak +0 -26
- package/dist/schema/ui-ir.js.bak +0 -51
- package/dist/sdk/api.d.ts.bak +0 -101
- package/dist/sdk/api.js.bak +0 -177
- package/dist/sdk/index.d.ts.bak +0 -9
- package/dist/sdk/index.js.bak +0 -10
- package/dist/sdk/react.d.ts.bak +0 -63
- package/dist/sdk/react.js.bak +0 -161
- package/dist/state/index.d.ts.bak +0 -8
- package/dist/state/index.js.bak +0 -8
- package/dist/state/patch.d.ts.bak +0 -73
- package/dist/state/patch.js.bak +0 -437
- package/dist/state/store.d.ts.bak +0 -50
- package/dist/state/store.js.bak +0 -246
- package/dist/svelte/index.d.ts.bak +0 -15
- package/dist/svelte/index.js.bak +0 -15
- package/dist/svelte/renderer.d.ts.bak +0 -35
- package/dist/svelte/renderer.js.bak +0 -317
- package/dist/types/index.d.ts.bak +0 -349
- package/dist/types/index.js.bak +0 -152
- package/dist/vue/index.d.ts.bak +0 -18
- package/dist/vue/index.js.bak +0 -18
- package/dist/vue/renderer.d.ts.bak +0 -46
- package/dist/vue/renderer.js.bak +0 -302
|
@@ -1,388 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Component Catalog Registry
|
|
3
|
-
*
|
|
4
|
-
* Versioned component registry with semantic versioning support.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Component Catalog
|
|
8
|
-
*/
|
|
9
|
-
export class ComponentCatalog {
|
|
10
|
-
components = new Map();
|
|
11
|
-
/**
|
|
12
|
-
* Register a component
|
|
13
|
-
*/
|
|
14
|
-
register(component) {
|
|
15
|
-
const key = `${component.name}@${component.version}`;
|
|
16
|
-
this.components.set(key, component);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Resolve component by name and optional version
|
|
20
|
-
*/
|
|
21
|
-
resolve(name, version) {
|
|
22
|
-
if (version) {
|
|
23
|
-
// Exact version
|
|
24
|
-
if (!version.includes('^') && !version.includes('~') && !version.includes('*')) {
|
|
25
|
-
return this.components.get(`${name}@${version}`);
|
|
26
|
-
}
|
|
27
|
-
// Semantic version range
|
|
28
|
-
return this.resolveVersion(name, version);
|
|
29
|
-
}
|
|
30
|
-
// Get latest version
|
|
31
|
-
return this.getLatest(name);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get latest version of component
|
|
35
|
-
*/
|
|
36
|
-
getLatest(name) {
|
|
37
|
-
const versions = [];
|
|
38
|
-
for (const [key, component] of this.components) {
|
|
39
|
-
if (key.startsWith(`${name}@`)) {
|
|
40
|
-
versions.push(component);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (versions.length === 0)
|
|
44
|
-
return undefined;
|
|
45
|
-
// Sort by version descending
|
|
46
|
-
versions.sort((a, b) => compareVersions(b.version, a.version));
|
|
47
|
-
return versions[0];
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Resolve version with semver range
|
|
51
|
-
*/
|
|
52
|
-
resolveVersion(name, range) {
|
|
53
|
-
const versions = [];
|
|
54
|
-
for (const [key, component] of this.components) {
|
|
55
|
-
if (key.startsWith(`${name}@`)) {
|
|
56
|
-
versions.push(component);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (versions.length === 0)
|
|
60
|
-
return undefined;
|
|
61
|
-
// Sort by version descending
|
|
62
|
-
versions.sort((a, b) => compareVersions(b.version, a.version));
|
|
63
|
-
// Parse range
|
|
64
|
-
if (range.startsWith('^')) {
|
|
65
|
-
// ^1.2.3 matches >=1.2.3 <2.0.0
|
|
66
|
-
const baseVersion = range.slice(1);
|
|
67
|
-
const [major] = baseVersion.split('.').map(Number);
|
|
68
|
-
return versions.find((v) => {
|
|
69
|
-
const [vMajor] = v.version.split('.').map(Number);
|
|
70
|
-
return vMajor === major && compareVersions(v.version, baseVersion) >= 0;
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
if (range.startsWith('~')) {
|
|
74
|
-
// ~1.2.3 matches >=1.2.3 <1.3.0
|
|
75
|
-
const baseVersion = range.slice(1);
|
|
76
|
-
const [major, minor] = baseVersion.split('.').map(Number);
|
|
77
|
-
return versions.find((v) => {
|
|
78
|
-
const [vMajor, vMinor] = v.version.split('.').map(Number);
|
|
79
|
-
return vMajor === major && vMinor === minor && compareVersions(v.version, baseVersion) >= 0;
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// Default: exact match or latest
|
|
83
|
-
return versions[0];
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Validate props against component schema
|
|
87
|
-
*/
|
|
88
|
-
validate(name, props, version) {
|
|
89
|
-
const component = this.resolve(name, version);
|
|
90
|
-
if (!component)
|
|
91
|
-
return false;
|
|
92
|
-
// Check required props
|
|
93
|
-
for (const prop of component.props) {
|
|
94
|
-
if (prop.required && !(prop.name in props)) {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Validate prop types
|
|
99
|
-
for (const [key, value] of Object.entries(props)) {
|
|
100
|
-
const propDef = component.props.find((p) => p.name === key);
|
|
101
|
-
if (!propDef)
|
|
102
|
-
continue; // Allow unknown props
|
|
103
|
-
if (!validateType(value, propDef.type)) {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
if (propDef.enum && !propDef.enum.includes(value)) {
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* List all components
|
|
114
|
-
*/
|
|
115
|
-
list(category) {
|
|
116
|
-
const all = Array.from(this.components.values());
|
|
117
|
-
if (category) {
|
|
118
|
-
return all.filter((c) => c.category === category);
|
|
119
|
-
}
|
|
120
|
-
return all;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Get available versions for component
|
|
124
|
-
*/
|
|
125
|
-
getVersions(name) {
|
|
126
|
-
const versions = [];
|
|
127
|
-
for (const key of this.components.keys()) {
|
|
128
|
-
if (key.startsWith(`${name}@`)) {
|
|
129
|
-
versions.push(key.slice(name.length + 1));
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return versions.sort((a, b) => compareVersions(b, a));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Compare semantic versions
|
|
137
|
-
* Returns: positive if a > b, negative if a < b, 0 if equal
|
|
138
|
-
*/
|
|
139
|
-
function compareVersions(a, b) {
|
|
140
|
-
const aParts = a.split('.').map(Number);
|
|
141
|
-
const bParts = b.split('.').map(Number);
|
|
142
|
-
for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
|
|
143
|
-
const aPart = aParts[i] || 0;
|
|
144
|
-
const bPart = bParts[i] || 0;
|
|
145
|
-
if (aPart > bPart)
|
|
146
|
-
return 1;
|
|
147
|
-
if (aPart < bPart)
|
|
148
|
-
return -1;
|
|
149
|
-
}
|
|
150
|
-
return 0;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Validate value against type
|
|
154
|
-
*/
|
|
155
|
-
function validateType(value, type) {
|
|
156
|
-
switch (type) {
|
|
157
|
-
case 'string':
|
|
158
|
-
return typeof value === 'string';
|
|
159
|
-
case 'number':
|
|
160
|
-
return typeof value === 'number' && !isNaN(value);
|
|
161
|
-
case 'boolean':
|
|
162
|
-
return typeof value === 'boolean';
|
|
163
|
-
case 'array':
|
|
164
|
-
return Array.isArray(value);
|
|
165
|
-
case 'object':
|
|
166
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
167
|
-
case 'function':
|
|
168
|
-
return typeof value === 'function';
|
|
169
|
-
case 'any':
|
|
170
|
-
return true;
|
|
171
|
-
default:
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Built-in component definitions
|
|
177
|
-
*/
|
|
178
|
-
export const BUILT_INS = {
|
|
179
|
-
// Layout
|
|
180
|
-
Box: {
|
|
181
|
-
name: 'Box',
|
|
182
|
-
version: '1.0.0',
|
|
183
|
-
category: 'layout',
|
|
184
|
-
props: [
|
|
185
|
-
{ name: 'padding', type: 'number' },
|
|
186
|
-
{ name: 'margin', type: 'number' },
|
|
187
|
-
{ name: 'width', type: 'any' },
|
|
188
|
-
{ name: 'height', type: 'any' },
|
|
189
|
-
{ name: 'display', type: 'string', enum: ['block', 'flex', 'grid', 'none'] },
|
|
190
|
-
{ name: 'flexDirection', type: 'string', enum: ['row', 'column'] },
|
|
191
|
-
{ name: 'justifyContent', type: 'string' },
|
|
192
|
-
{ name: 'alignItems', type: 'string' },
|
|
193
|
-
{ name: 'gap', type: 'number' },
|
|
194
|
-
{ name: 'backgroundColor', type: 'string' },
|
|
195
|
-
{ name: 'borderRadius', type: 'number' },
|
|
196
|
-
],
|
|
197
|
-
acceptChildren: true,
|
|
198
|
-
},
|
|
199
|
-
Stack: {
|
|
200
|
-
name: 'Stack',
|
|
201
|
-
version: '1.0.0',
|
|
202
|
-
category: 'layout',
|
|
203
|
-
props: [
|
|
204
|
-
{ name: 'direction', type: 'string', enum: ['horizontal', 'vertical'], default: 'vertical' },
|
|
205
|
-
{ name: 'spacing', type: 'number', default: 0 },
|
|
206
|
-
{ name: 'align', type: 'string', enum: ['start', 'center', 'end', 'stretch'] },
|
|
207
|
-
{ name: 'justify', type: 'string', enum: ['start', 'center', 'end', 'between', 'around'] },
|
|
208
|
-
],
|
|
209
|
-
acceptChildren: true,
|
|
210
|
-
},
|
|
211
|
-
// Typography
|
|
212
|
-
Text: {
|
|
213
|
-
name: 'Text',
|
|
214
|
-
version: '1.0.0',
|
|
215
|
-
category: 'typography',
|
|
216
|
-
props: [
|
|
217
|
-
{ name: 'children', type: 'any', required: true },
|
|
218
|
-
{ name: 'variant', type: 'string', enum: ['body', 'heading', 'caption', 'label'] },
|
|
219
|
-
{ name: 'size', type: 'string', enum: ['xs', 'sm', 'md', 'lg', 'xl'] },
|
|
220
|
-
{ name: 'weight', type: 'string', enum: ['normal', 'medium', 'semibold', 'bold'] },
|
|
221
|
-
{ name: 'color', type: 'string' },
|
|
222
|
-
{ name: 'align', type: 'string', enum: ['left', 'center', 'right'] },
|
|
223
|
-
{ name: 'truncate', type: 'boolean', default: false },
|
|
224
|
-
],
|
|
225
|
-
acceptChildren: false,
|
|
226
|
-
},
|
|
227
|
-
Heading: {
|
|
228
|
-
name: 'Heading',
|
|
229
|
-
version: '1.0.0',
|
|
230
|
-
category: 'typography',
|
|
231
|
-
props: [
|
|
232
|
-
{ name: 'children', type: 'any', required: true },
|
|
233
|
-
{ name: 'level', type: 'number', enum: [1, 2, 3, 4, 5, 6], default: 1 },
|
|
234
|
-
{ name: 'color', type: 'string' },
|
|
235
|
-
],
|
|
236
|
-
acceptChildren: false,
|
|
237
|
-
},
|
|
238
|
-
Paragraph: {
|
|
239
|
-
name: 'Paragraph',
|
|
240
|
-
version: '1.0.0',
|
|
241
|
-
category: 'typography',
|
|
242
|
-
props: [
|
|
243
|
-
{ name: 'children', type: 'any', required: true },
|
|
244
|
-
{ name: 'size', type: 'string', enum: ['sm', 'md', 'lg'] },
|
|
245
|
-
{ name: 'color', type: 'string' },
|
|
246
|
-
],
|
|
247
|
-
acceptChildren: false,
|
|
248
|
-
},
|
|
249
|
-
// Input
|
|
250
|
-
Button: {
|
|
251
|
-
name: 'Button',
|
|
252
|
-
version: '1.0.0',
|
|
253
|
-
category: 'input',
|
|
254
|
-
props: [
|
|
255
|
-
{ name: 'children', type: 'any', required: true },
|
|
256
|
-
{ name: 'variant', type: 'string', enum: ['primary', 'secondary', 'ghost', 'danger'], default: 'primary' },
|
|
257
|
-
{ name: 'size', type: 'string', enum: ['sm', 'md', 'lg'], default: 'md' },
|
|
258
|
-
{ name: 'disabled', type: 'boolean', default: false },
|
|
259
|
-
{ name: 'loading', type: 'boolean', default: false },
|
|
260
|
-
{ name: 'onClick', type: 'function' },
|
|
261
|
-
],
|
|
262
|
-
acceptChildren: false,
|
|
263
|
-
},
|
|
264
|
-
Input: {
|
|
265
|
-
name: 'Input',
|
|
266
|
-
version: '1.0.0',
|
|
267
|
-
category: 'input',
|
|
268
|
-
props: [
|
|
269
|
-
{ name: 'value', type: 'string' },
|
|
270
|
-
{ name: 'placeholder', type: 'string' },
|
|
271
|
-
{ name: 'type', type: 'string', enum: ['text', 'password', 'email', 'number', 'tel'], default: 'text' },
|
|
272
|
-
{ name: 'disabled', type: 'boolean', default: false },
|
|
273
|
-
{ name: 'required', type: 'boolean', default: false },
|
|
274
|
-
{ name: 'onChange', type: 'function' },
|
|
275
|
-
{ name: 'onBlur', type: 'function' },
|
|
276
|
-
{ name: 'onFocus', type: 'function' },
|
|
277
|
-
],
|
|
278
|
-
acceptChildren: false,
|
|
279
|
-
},
|
|
280
|
-
TextArea: {
|
|
281
|
-
name: 'TextArea',
|
|
282
|
-
version: '1.0.0',
|
|
283
|
-
category: 'input',
|
|
284
|
-
props: [
|
|
285
|
-
{ name: 'value', type: 'string' },
|
|
286
|
-
{ name: 'placeholder', type: 'string' },
|
|
287
|
-
{ name: 'rows', type: 'number', default: 3 },
|
|
288
|
-
{ name: 'disabled', type: 'boolean', default: false },
|
|
289
|
-
{ name: 'onChange', type: 'function' },
|
|
290
|
-
],
|
|
291
|
-
acceptChildren: false,
|
|
292
|
-
},
|
|
293
|
-
Select: {
|
|
294
|
-
name: 'Select',
|
|
295
|
-
version: '1.0.0',
|
|
296
|
-
category: 'input',
|
|
297
|
-
props: [
|
|
298
|
-
{ name: 'value', type: 'any' },
|
|
299
|
-
{ name: 'options', type: 'array', required: true },
|
|
300
|
-
{ name: 'placeholder', type: 'string' },
|
|
301
|
-
{ name: 'disabled', type: 'boolean', default: false },
|
|
302
|
-
{ name: 'onChange', type: 'function' },
|
|
303
|
-
],
|
|
304
|
-
acceptChildren: false,
|
|
305
|
-
},
|
|
306
|
-
// Display
|
|
307
|
-
Image: {
|
|
308
|
-
name: 'Image',
|
|
309
|
-
version: '1.0.0',
|
|
310
|
-
category: 'display',
|
|
311
|
-
props: [
|
|
312
|
-
{ name: 'src', type: 'string', required: true },
|
|
313
|
-
{ name: 'alt', type: 'string', default: '' },
|
|
314
|
-
{ name: 'width', type: 'any' },
|
|
315
|
-
{ name: 'height', type: 'any' },
|
|
316
|
-
{ name: 'objectFit', type: 'string', enum: ['cover', 'contain', 'fill', 'none'] },
|
|
317
|
-
],
|
|
318
|
-
acceptChildren: false,
|
|
319
|
-
},
|
|
320
|
-
Icon: {
|
|
321
|
-
name: 'Icon',
|
|
322
|
-
version: '1.0.0',
|
|
323
|
-
category: 'display',
|
|
324
|
-
props: [
|
|
325
|
-
{ name: 'name', type: 'string', required: true },
|
|
326
|
-
{ name: 'size', type: 'number', default: 16 },
|
|
327
|
-
{ name: 'color', type: 'string' },
|
|
328
|
-
],
|
|
329
|
-
acceptChildren: false,
|
|
330
|
-
},
|
|
331
|
-
Badge: {
|
|
332
|
-
name: 'Badge',
|
|
333
|
-
version: '1.0.0',
|
|
334
|
-
category: 'display',
|
|
335
|
-
props: [
|
|
336
|
-
{ name: 'children', type: 'any', required: true },
|
|
337
|
-
{ name: 'variant', type: 'string', enum: ['default', 'success', 'warning', 'error', 'info'], default: 'default' },
|
|
338
|
-
{ name: 'size', type: 'string', enum: ['sm', 'md'], default: 'md' },
|
|
339
|
-
],
|
|
340
|
-
acceptChildren: false,
|
|
341
|
-
},
|
|
342
|
-
Card: {
|
|
343
|
-
name: 'Card',
|
|
344
|
-
version: '1.0.0',
|
|
345
|
-
category: 'display',
|
|
346
|
-
props: [
|
|
347
|
-
{ name: 'padding', type: 'number', default: 16 },
|
|
348
|
-
{ name: 'elevation', type: 'number', enum: [0, 1, 2, 3], default: 1 },
|
|
349
|
-
{ name: 'borderRadius', type: 'number', default: 8 },
|
|
350
|
-
],
|
|
351
|
-
acceptChildren: true,
|
|
352
|
-
},
|
|
353
|
-
List: {
|
|
354
|
-
name: 'List',
|
|
355
|
-
version: '1.0.0',
|
|
356
|
-
category: 'display',
|
|
357
|
-
props: [
|
|
358
|
-
{ name: 'items', type: 'array', required: true },
|
|
359
|
-
{ name: 'renderItem', type: 'function', required: true },
|
|
360
|
-
{ name: 'keyExtractor', type: 'function' },
|
|
361
|
-
{ name: 'emptyText', type: 'string' },
|
|
362
|
-
],
|
|
363
|
-
acceptChildren: false,
|
|
364
|
-
},
|
|
365
|
-
Table: {
|
|
366
|
-
name: 'Table',
|
|
367
|
-
version: '1.0.0',
|
|
368
|
-
category: 'display',
|
|
369
|
-
props: [
|
|
370
|
-
{ name: 'data', type: 'array', required: true },
|
|
371
|
-
{ name: 'columns', type: 'array', required: true },
|
|
372
|
-
{ name: 'onRowClick', type: 'function' },
|
|
373
|
-
{ name: 'emptyText', type: 'string' },
|
|
374
|
-
],
|
|
375
|
-
acceptChildren: false,
|
|
376
|
-
},
|
|
377
|
-
};
|
|
378
|
-
/**
|
|
379
|
-
* Create default catalog with built-ins
|
|
380
|
-
*/
|
|
381
|
-
export function createDefaultCatalog() {
|
|
382
|
-
const catalog = new ComponentCatalog();
|
|
383
|
-
Object.values(BUILT_INS).forEach((component) => {
|
|
384
|
-
catalog.register(component);
|
|
385
|
-
});
|
|
386
|
-
return catalog;
|
|
387
|
-
}
|
|
388
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Capsule Registry - GAP-69, 70, 71
|
|
3
|
-
*
|
|
4
|
-
* Track subscribers and broadcast capsule events
|
|
5
|
-
*/
|
|
6
|
-
import { EventEmitter } from 'events';
|
|
7
|
-
export interface CapsuleEvent {
|
|
8
|
-
/** Event type */
|
|
9
|
-
type: string;
|
|
10
|
-
/** Capsule ID */
|
|
11
|
-
capsuleId: string;
|
|
12
|
-
/** Event payload */
|
|
13
|
-
payload: any;
|
|
14
|
-
/** Timestamp */
|
|
15
|
-
timestamp: Date;
|
|
16
|
-
/** Sender ID */
|
|
17
|
-
senderId?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface CapsuleSubscriber {
|
|
20
|
-
/** Subscriber ID */
|
|
21
|
-
id: string;
|
|
22
|
-
/** WebSocket connection */
|
|
23
|
-
ws: WebSocket;
|
|
24
|
-
/** Subscribed capsule IDs */
|
|
25
|
-
capsuleIds: Set<string>;
|
|
26
|
-
/** Connection time */
|
|
27
|
-
connectedAt: Date;
|
|
28
|
-
/** Last activity */
|
|
29
|
-
lastActivity: Date;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Capsule Registry - GAP-69, 70, 71
|
|
33
|
-
*
|
|
34
|
-
* Track subscribers and broadcast events
|
|
35
|
-
*/
|
|
36
|
-
export declare class CapsuleRegistry extends EventEmitter {
|
|
37
|
-
private subscribers;
|
|
38
|
-
private subscriberById;
|
|
39
|
-
private capsuleSubscribers;
|
|
40
|
-
constructor();
|
|
41
|
-
/**
|
|
42
|
-
* Subscribe to a capsule
|
|
43
|
-
*/
|
|
44
|
-
subscribe(capsuleId: string, ws: WebSocket, subscriberId?: string): string;
|
|
45
|
-
/**
|
|
46
|
-
* Unsubscribe from a capsule
|
|
47
|
-
*/
|
|
48
|
-
unsubscribe(subscriberId: string, capsuleId?: string): void;
|
|
49
|
-
/**
|
|
50
|
-
* Broadcast event to all capsule subscribers
|
|
51
|
-
*/
|
|
52
|
-
broadcast(capsuleId: string, event: CapsuleEvent): void;
|
|
53
|
-
/**
|
|
54
|
-
* Broadcast to all capsules
|
|
55
|
-
*/
|
|
56
|
-
broadcastAll(event: Omit<CapsuleEvent, 'capsuleId'>): void;
|
|
57
|
-
/**
|
|
58
|
-
* Send event to specific subscriber
|
|
59
|
-
*/
|
|
60
|
-
sendToSubscriber(subscriberId: string, event: CapsuleEvent): boolean;
|
|
61
|
-
/**
|
|
62
|
-
* Get subscribers for a capsule
|
|
63
|
-
*/
|
|
64
|
-
getCapsuleSubscribers(capsuleId: string): CapsuleSubscriber[];
|
|
65
|
-
/**
|
|
66
|
-
* Get subscriber count for a capsule
|
|
67
|
-
*/
|
|
68
|
-
getSubscriberCount(capsuleId: string): number;
|
|
69
|
-
/**
|
|
70
|
-
* Get all capsules
|
|
71
|
-
*/
|
|
72
|
-
getAllCapsules(): string[];
|
|
73
|
-
/**
|
|
74
|
-
* Get subscriber by ID
|
|
75
|
-
*/
|
|
76
|
-
getSubscriber(subscriberId: string): CapsuleSubscriber | undefined;
|
|
77
|
-
/**
|
|
78
|
-
* Get all subscribers
|
|
79
|
-
*/
|
|
80
|
-
getAllSubscribers(): CapsuleSubscriber[];
|
|
81
|
-
/**
|
|
82
|
-
* Get capsules for a subscriber
|
|
83
|
-
*/
|
|
84
|
-
getSubscriberCapsules(subscriberId: string): string[];
|
|
85
|
-
/**
|
|
86
|
-
* Handle message from subscriber
|
|
87
|
-
*/
|
|
88
|
-
private handleSubscriberMessage;
|
|
89
|
-
/**
|
|
90
|
-
* Generate unique subscriber ID
|
|
91
|
-
*/
|
|
92
|
-
private generateSubscriberId;
|
|
93
|
-
/**
|
|
94
|
-
* Get registry statistics
|
|
95
|
-
*/
|
|
96
|
-
getStats(): {
|
|
97
|
-
totalSubscribers: number;
|
|
98
|
-
totalCapsules: number;
|
|
99
|
-
capsules: Map<string, number>;
|
|
100
|
-
};
|
|
101
|
-
/**
|
|
102
|
-
* Clean up inactive subscribers
|
|
103
|
-
*/
|
|
104
|
-
cleanupInactive(timeoutMs?: number): number;
|
|
105
|
-
/**
|
|
106
|
-
* Destroy registry
|
|
107
|
-
*/
|
|
108
|
-
destroy(): void;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Create capsule registry
|
|
112
|
-
*/
|
|
113
|
-
export declare function createCapsuleRegistry(): CapsuleRegistry;
|
|
114
|
-
//# sourceMappingURL=capsule-registry.d.ts.map
|