lastriko 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.
Files changed (101) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +58 -0
  3. package/dist/__tests__/integration/ws-flow.integration.test.d.ts +1 -0
  4. package/dist/__tests__/integration/ws-flow.integration.test.js +249 -0
  5. package/dist/__tests__/integration/ws-flow.integration.test.js.map +1 -0
  6. package/dist/__tests__/integration/ws-flow.test.d.ts +1 -0
  7. package/dist/__tests__/integration/ws-flow.test.js +70 -0
  8. package/dist/__tests__/integration/ws-flow.test.js.map +1 -0
  9. package/dist/client/events.d.ts +6 -0
  10. package/dist/client/events.js +114 -0
  11. package/dist/client/events.js.map +1 -0
  12. package/dist/client/index.d.ts +2 -0
  13. package/dist/client/index.js +5 -0
  14. package/dist/client/index.js.map +1 -0
  15. package/dist/client/swap.d.ts +4 -0
  16. package/dist/client/swap.js +47 -0
  17. package/dist/client/swap.js.map +1 -0
  18. package/dist/client/ws.d.ts +11 -0
  19. package/dist/client/ws.js +111 -0
  20. package/dist/client/ws.js.map +1 -0
  21. package/dist/components/context.d.ts +51 -0
  22. package/dist/components/context.js +595 -0
  23. package/dist/components/context.js.map +1 -0
  24. package/dist/components/context.test.d.ts +1 -0
  25. package/dist/components/context.test.js +69 -0
  26. package/dist/components/context.test.js.map +1 -0
  27. package/dist/components/id.d.ts +3 -0
  28. package/dist/components/id.js +9 -0
  29. package/dist/components/id.js.map +1 -0
  30. package/dist/components/registry.d.ts +2 -0
  31. package/dist/components/registry.js +97 -0
  32. package/dist/components/registry.js.map +1 -0
  33. package/dist/components/types.d.ts +390 -0
  34. package/dist/components/types.js +2 -0
  35. package/dist/components/types.js.map +1 -0
  36. package/dist/engine/executor.d.ts +20 -0
  37. package/dist/engine/executor.js +84 -0
  38. package/dist/engine/executor.js.map +1 -0
  39. package/dist/engine/executor.test.d.ts +1 -0
  40. package/dist/engine/executor.test.js +79 -0
  41. package/dist/engine/executor.test.js.map +1 -0
  42. package/dist/engine/index.d.ts +6 -0
  43. package/dist/engine/index.js +7 -0
  44. package/dist/engine/index.js.map +1 -0
  45. package/dist/engine/lifecycle.d.ts +16 -0
  46. package/dist/engine/lifecycle.js +44 -0
  47. package/dist/engine/lifecycle.js.map +1 -0
  48. package/dist/engine/lifecycle.test.d.ts +1 -0
  49. package/dist/engine/lifecycle.test.js +15 -0
  50. package/dist/engine/lifecycle.test.js.map +1 -0
  51. package/dist/engine/messages.d.ts +95 -0
  52. package/dist/engine/messages.js +21 -0
  53. package/dist/engine/messages.js.map +1 -0
  54. package/dist/engine/renderer.components.test.d.ts +1 -0
  55. package/dist/engine/renderer.components.test.js +302 -0
  56. package/dist/engine/renderer.components.test.js.map +1 -0
  57. package/dist/engine/renderer.d.ts +4 -0
  58. package/dist/engine/renderer.js +408 -0
  59. package/dist/engine/renderer.js.map +1 -0
  60. package/dist/engine/renderer.test.d.ts +1 -0
  61. package/dist/engine/renderer.test.js +80 -0
  62. package/dist/engine/renderer.test.js.map +1 -0
  63. package/dist/engine/server.d.ts +43 -0
  64. package/dist/engine/server.js +402 -0
  65. package/dist/engine/server.js.map +1 -0
  66. package/dist/engine/server.test.d.ts +1 -0
  67. package/dist/engine/server.test.js +149 -0
  68. package/dist/engine/server.test.js.map +1 -0
  69. package/dist/engine/shell.d.ts +7 -0
  70. package/dist/engine/shell.js +25 -0
  71. package/dist/engine/shell.js.map +1 -0
  72. package/dist/engine/theme-path.d.ts +11 -0
  73. package/dist/engine/theme-path.js +32 -0
  74. package/dist/engine/theme-path.js.map +1 -0
  75. package/dist/engine/theme-path.test.d.ts +1 -0
  76. package/dist/engine/theme-path.test.js +52 -0
  77. package/dist/engine/theme-path.test.js.map +1 -0
  78. package/dist/engine/watcher.d.ts +8 -0
  79. package/dist/engine/watcher.js +27 -0
  80. package/dist/engine/watcher.js.map +1 -0
  81. package/dist/engine/websocket.d.ts +24 -0
  82. package/dist/engine/websocket.hub.test.d.ts +1 -0
  83. package/dist/engine/websocket.hub.test.js +75 -0
  84. package/dist/engine/websocket.hub.test.js.map +1 -0
  85. package/dist/engine/websocket.js +119 -0
  86. package/dist/engine/websocket.js.map +1 -0
  87. package/dist/index.d.ts +21 -0
  88. package/dist/index.js +26 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/plugins/registry.d.ts +11 -0
  91. package/dist/plugins/registry.js +61 -0
  92. package/dist/plugins/registry.js.map +1 -0
  93. package/dist/plugins/registry.test.d.ts +1 -0
  94. package/dist/plugins/registry.test.js +44 -0
  95. package/dist/plugins/registry.test.js.map +1 -0
  96. package/dist/plugins/types.d.ts +30 -0
  97. package/dist/plugins/types.js +2 -0
  98. package/dist/plugins/types.js.map +1 -0
  99. package/dist/style.css +134 -0
  100. package/dist/theme/lastriko.css +134 -0
  101. package/package.json +60 -0
@@ -0,0 +1,302 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { renderComponent, renderPage } from './renderer';
3
+ function textHandle(id, content) {
4
+ return {
5
+ id,
6
+ type: 'text',
7
+ props: { content },
8
+ get value() {
9
+ return content;
10
+ },
11
+ update(next) {
12
+ content = next;
13
+ this.props.content = next;
14
+ },
15
+ };
16
+ }
17
+ describe('renderComponent — Phase 2 surface', () => {
18
+ it('renders every component type with data-lk-id and escaped user text', () => {
19
+ const malicious = '<script>x</script>';
20
+ const handles = [
21
+ textHandle('text-1', malicious),
22
+ {
23
+ id: 'button-1',
24
+ type: 'button',
25
+ props: { label: malicious, loading: false, variant: 'secondary', onClick: () => { }, disabled: false },
26
+ get value() {
27
+ return false;
28
+ },
29
+ update: () => { },
30
+ setLoading: () => { },
31
+ },
32
+ {
33
+ id: 'textInput-1',
34
+ type: 'textInput',
35
+ props: { label: 'L', value: malicious, multiline: false },
36
+ get value() {
37
+ return this.props.value;
38
+ },
39
+ update: () => { },
40
+ },
41
+ {
42
+ id: 'numberInput-1',
43
+ type: 'numberInput',
44
+ props: { label: 'N', value: 3, min: 0, max: 10 },
45
+ get value() {
46
+ return this.props.value;
47
+ },
48
+ update: () => { },
49
+ },
50
+ {
51
+ id: 'slider-1',
52
+ type: 'slider',
53
+ props: { label: 'S', min: 0, max: 1, step: 0.1, value: 0.5, showValue: true },
54
+ get value() {
55
+ return this.props.value;
56
+ },
57
+ update: () => { },
58
+ },
59
+ {
60
+ id: 'toggle-1',
61
+ type: 'toggle',
62
+ props: { label: 'T', value: true },
63
+ get value() {
64
+ return this.props.value;
65
+ },
66
+ update: () => { },
67
+ },
68
+ {
69
+ id: 'select-1',
70
+ type: 'select',
71
+ props: {
72
+ label: 'Sel',
73
+ value: 'a',
74
+ options: [{ label: malicious, value: 'a' }],
75
+ },
76
+ get value() {
77
+ return this.props.value;
78
+ },
79
+ update: () => { },
80
+ },
81
+ {
82
+ id: 'fileUpload-1',
83
+ type: 'fileUpload',
84
+ props: { label: 'F', value: null, dragDrop: true, maxSize: 1 },
85
+ get value() {
86
+ return this.props.value;
87
+ },
88
+ update: () => { },
89
+ },
90
+ {
91
+ id: 'promptEditor-1',
92
+ type: 'promptEditor',
93
+ props: {
94
+ label: 'P',
95
+ value: 'x',
96
+ multiline: true,
97
+ rows: 2,
98
+ showCharCount: true,
99
+ },
100
+ get value() {
101
+ return this.props.value;
102
+ },
103
+ update: () => { },
104
+ interpolate: () => '',
105
+ },
106
+ {
107
+ id: 'markdown-1',
108
+ type: 'markdown',
109
+ props: { content: malicious },
110
+ value: undefined,
111
+ update: () => { },
112
+ },
113
+ {
114
+ id: 'image-1',
115
+ type: 'image',
116
+ props: { src: null, alt: malicious },
117
+ value: undefined,
118
+ update: () => { },
119
+ },
120
+ {
121
+ id: 'imageGrid-1',
122
+ type: 'imageGrid',
123
+ props: { items: [{ src: 'https://ex.test/x', alt: malicious }] },
124
+ value: undefined,
125
+ update: () => { },
126
+ },
127
+ {
128
+ id: 'code-1',
129
+ type: 'code',
130
+ props: { content: malicious, lang: 'ts' },
131
+ value: undefined,
132
+ update: () => { },
133
+ },
134
+ {
135
+ id: 'json-1',
136
+ type: 'json',
137
+ props: { data: { evil: malicious }, label: malicious },
138
+ value: undefined,
139
+ update: () => { },
140
+ },
141
+ {
142
+ id: 'table-1',
143
+ type: 'table',
144
+ props: {
145
+ columns: ['c'],
146
+ rows: [{ id: 'r1', data: { c: malicious } }],
147
+ striped: true,
148
+ emptyMessage: 'empty',
149
+ getOnRowClick: () => null,
150
+ },
151
+ value: undefined,
152
+ get rowCount() {
153
+ return this.props.rows.length;
154
+ },
155
+ update: () => { },
156
+ append: () => ({ id: 'x', update: () => { }, remove: () => { } }),
157
+ prepend: () => ({ id: 'x', update: () => { }, remove: () => { } }),
158
+ remove: () => { },
159
+ onRowClick: () => { },
160
+ },
161
+ {
162
+ id: 'metric-1',
163
+ type: 'metric',
164
+ props: { label: malicious, value: '1', delta: -5, deltaLabel: malicious },
165
+ get value() {
166
+ return this.props.value;
167
+ },
168
+ update: () => { },
169
+ },
170
+ {
171
+ id: 'progress-1',
172
+ type: 'progress',
173
+ props: { value: 50, label: malicious },
174
+ get value() {
175
+ return this.props.value;
176
+ },
177
+ update: () => { },
178
+ },
179
+ {
180
+ id: 'progress-2',
181
+ type: 'progress',
182
+ props: { value: null },
183
+ get value() {
184
+ return this.props.value;
185
+ },
186
+ update: () => { },
187
+ },
188
+ {
189
+ id: 'alert-1',
190
+ type: 'alert',
191
+ props: { message: malicious, type: 'warning', title: malicious },
192
+ value: undefined,
193
+ update: () => { },
194
+ },
195
+ {
196
+ id: 'loading-1',
197
+ type: 'loading',
198
+ props: { message: malicious, mode: 'inline', size: 'md' },
199
+ value: undefined,
200
+ update: () => { },
201
+ },
202
+ {
203
+ id: 'streamText-1',
204
+ type: 'streamText',
205
+ props: { text: malicious, isStreaming: true, format: 'plain', cursor: true },
206
+ get value() {
207
+ return this.props.text;
208
+ },
209
+ get text() {
210
+ return this.props.text;
211
+ },
212
+ get isStreaming() {
213
+ return this.props.isStreaming;
214
+ },
215
+ append: () => { },
216
+ done: () => { },
217
+ clear: () => { },
218
+ update: () => { },
219
+ },
220
+ {
221
+ id: 'streamText-2',
222
+ type: 'streamText',
223
+ props: { text: 'hi', isStreaming: false, format: 'plain', cursor: true },
224
+ get value() {
225
+ return this.props.text;
226
+ },
227
+ get text() {
228
+ return this.props.text;
229
+ },
230
+ get isStreaming() {
231
+ return this.props.isStreaming;
232
+ },
233
+ append: () => { },
234
+ done: () => { },
235
+ clear: () => { },
236
+ update: () => { },
237
+ },
238
+ {
239
+ id: 'chatUI-1',
240
+ type: 'chatUI',
241
+ props: {
242
+ messages: [{ role: 'user', content: malicious, timestamp: 1 }],
243
+ },
244
+ get value() {
245
+ return this.props.messages;
246
+ },
247
+ get lastMessage() {
248
+ return this.props.messages[0] ?? null;
249
+ },
250
+ update: () => { },
251
+ addMessage: () => { },
252
+ clear: () => { },
253
+ },
254
+ ];
255
+ for (const h of handles) {
256
+ const html = renderComponent(h);
257
+ expect(html).toContain(`data-lk-id="${h.id}"`);
258
+ expect(html).not.toContain('<script>');
259
+ }
260
+ });
261
+ it('renders shell with only main when header/sidebar/footer are empty', () => {
262
+ const handles = [
263
+ textHandle('text-1', 'main only'),
264
+ {
265
+ id: 'shell-1',
266
+ type: 'shell',
267
+ props: {
268
+ regions: { header: [], sidebar: [], main: ['text-1'], footer: [] },
269
+ opts: { sidebarPosition: 'right', sidebarWidth: '200px' },
270
+ },
271
+ value: undefined,
272
+ update: () => { },
273
+ },
274
+ ];
275
+ const html = renderPage(handles);
276
+ expect(html).toContain('lk-shell-main');
277
+ expect(html).not.toContain('lk-shell-header');
278
+ expect(html).not.toContain('lk-shell-sidebar');
279
+ expect(html).not.toContain('lk-shell-footer');
280
+ expect(html).toContain('lk-shell--sidebar-right');
281
+ });
282
+ it('renders grid with numeric cols in style', () => {
283
+ const handles = [
284
+ textHandle('text-1', 'a'),
285
+ textHandle('text-2', 'b'),
286
+ {
287
+ id: 'grid-1',
288
+ type: 'grid',
289
+ props: {
290
+ cells: [['text-1'], ['text-2']],
291
+ opts: { cols: 1, gap: 8 },
292
+ },
293
+ value: undefined,
294
+ update: () => { },
295
+ },
296
+ ];
297
+ const html = renderPage(handles);
298
+ expect(html).toContain('grid-template-columns:repeat(1, minmax(0, 1fr))');
299
+ expect(html).toContain('gap:8px');
300
+ });
301
+ });
302
+ //# sourceMappingURL=renderer.components.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.components.test.js","sourceRoot":"","sources":["../../src/engine/renderer.components.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AnyComponentHandle } from '../components/types';
2
+ export declare function escapeHtml(input: string): string;
3
+ export declare function renderComponent(handle: AnyComponentHandle, byId?: Map<string, AnyComponentHandle>): string;
4
+ export declare function renderPage(components: AnyComponentHandle[]): string;