@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.
Files changed (103) hide show
  1. package/README.md +6 -6
  2. package/dist/adapters/json-render.d.ts +5 -5
  3. package/dist/adapters/json-render.js +12 -12
  4. package/dist/collab/visual-editor.d.ts +1 -1
  5. package/dist/collab/visual-editor.js +4 -4
  6. package/dist/collab/visual-editor.js.map +1 -1
  7. package/dist/collab/yjs-adapter.d.ts +1 -1
  8. package/dist/collab/yjs-adapter.js +2 -2
  9. package/dist/collab/yjs-adapter.js.map +1 -1
  10. package/dist/collab/yjs-client.js +1 -1
  11. package/dist/collab/yjs-client.js.map +1 -1
  12. package/dist/collab/yjs-types.js +1 -1
  13. package/dist/collab/yjs-types.js.map +1 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/pipeline/llm-to-ix.d.ts +5 -5
  17. package/dist/pipeline/llm-to-ix.d.ts.map +1 -1
  18. package/dist/pipeline/llm-to-ix.js +6 -6
  19. package/dist/react/renderer.d.ts +2 -2
  20. package/dist/react/renderer.js +3 -3
  21. package/dist/react/renderer.js.map +1 -1
  22. package/dist/renderer/renderer.d.ts +1 -1
  23. package/dist/renderer/renderer.js +1 -1
  24. package/dist/runtime/capsule-runtime.d.ts +1 -1
  25. package/dist/runtime/capsule-runtime.js +1 -1
  26. package/dist/sdk/api.d.ts +3 -3
  27. package/dist/sdk/api.js +3 -3
  28. package/dist/sdk/index.d.ts +2 -2
  29. package/dist/sdk/index.js +2 -2
  30. package/dist/sdk/react.d.ts +2 -2
  31. package/dist/sdk/react.js +2 -2
  32. package/dist/state/index.d.ts +1 -1
  33. package/dist/state/index.js +1 -1
  34. package/dist/state/store.d.ts +1 -1
  35. package/dist/state/store.js +3 -3
  36. package/dist/state/store.js.map +1 -1
  37. package/dist/svelte/index.d.ts +1 -1
  38. package/dist/svelte/index.js +1 -1
  39. package/dist/svelte/renderer.d.ts +3 -3
  40. package/dist/svelte/renderer.js +4 -4
  41. package/dist/svelte/renderer.js.map +1 -1
  42. package/dist/types/index.d.ts +1 -1
  43. package/dist/types/index.js +1 -1
  44. package/dist/vue/renderer.d.ts +3 -3
  45. package/dist/vue/renderer.js +5 -5
  46. package/dist/vue/renderer.js.map +1 -1
  47. package/package.json +8 -8
  48. package/dist/adapters/json-render.d.ts.bak +0 -211
  49. package/dist/adapters/json-render.js.bak +0 -576
  50. package/dist/catalog/registry.d.ts.bak +0 -65
  51. package/dist/catalog/registry.js.bak +0 -388
  52. package/dist/collab/capsule-registry.d.ts.bak +0 -114
  53. package/dist/collab/capsule-registry.js.bak +0 -271
  54. package/dist/collab/index.d.ts.bak +0 -21
  55. package/dist/collab/index.js.bak +0 -32
  56. package/dist/collab/visual-editor.d.ts.bak +0 -199
  57. package/dist/collab/visual-editor.js.bak +0 -259
  58. package/dist/collab/yjs-adapter.d.ts.bak +0 -95
  59. package/dist/collab/yjs-adapter.js.bak +0 -282
  60. package/dist/collab/yjs-client.d.ts.bak +0 -101
  61. package/dist/collab/yjs-client.js.bak +0 -193
  62. package/dist/collab/yjs-protocols.d.ts.bak +0 -128
  63. package/dist/collab/yjs-protocols.js.bak +0 -245
  64. package/dist/collab/yjs-types.d.ts.bak +0 -201
  65. package/dist/collab/yjs-types.js.bak +0 -45
  66. package/dist/index.d.ts.bak +0 -38
  67. package/dist/index.js.bak +0 -48
  68. package/dist/pipeline/llm-to-ix.d.ts.bak +0 -249
  69. package/dist/pipeline/llm-to-ix.js.bak +0 -992
  70. package/dist/react/index.d.ts.bak +0 -18
  71. package/dist/react/index.js.bak +0 -18
  72. package/dist/react/renderer.d.ts.bak +0 -47
  73. package/dist/react/renderer.js.bak +0 -420
  74. package/dist/renderer/renderer.d.ts.bak +0 -55
  75. package/dist/renderer/renderer.js.bak +0 -232
  76. package/dist/runtime/capsule-runtime.d.ts.bak +0 -227
  77. package/dist/runtime/capsule-runtime.js.bak +0 -563
  78. package/dist/runtime/policy-gates.d.ts.bak +0 -116
  79. package/dist/runtime/policy-gates.js.bak +0 -317
  80. package/dist/schema/ui-ir.d.ts.bak +0 -26
  81. package/dist/schema/ui-ir.js.bak +0 -51
  82. package/dist/sdk/api.d.ts.bak +0 -101
  83. package/dist/sdk/api.js.bak +0 -177
  84. package/dist/sdk/index.d.ts.bak +0 -9
  85. package/dist/sdk/index.js.bak +0 -10
  86. package/dist/sdk/react.d.ts.bak +0 -63
  87. package/dist/sdk/react.js.bak +0 -161
  88. package/dist/state/index.d.ts.bak +0 -8
  89. package/dist/state/index.js.bak +0 -8
  90. package/dist/state/patch.d.ts.bak +0 -73
  91. package/dist/state/patch.js.bak +0 -437
  92. package/dist/state/store.d.ts.bak +0 -50
  93. package/dist/state/store.js.bak +0 -246
  94. package/dist/svelte/index.d.ts.bak +0 -15
  95. package/dist/svelte/index.js.bak +0 -15
  96. package/dist/svelte/renderer.d.ts.bak +0 -35
  97. package/dist/svelte/renderer.js.bak +0 -317
  98. package/dist/types/index.d.ts.bak +0 -349
  99. package/dist/types/index.js.bak +0 -152
  100. package/dist/vue/index.d.ts.bak +0 -18
  101. package/dist/vue/index.js.bak +0 -18
  102. package/dist/vue/renderer.d.ts.bak +0 -46
  103. 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