lastriko 0.1.4 → 0.1.7

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 (54) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/integration/ws-flow.integration.test.js +38 -140
  3. package/dist/__tests__/integration/ws-flow.integration.test.js.map +1 -1
  4. package/dist/client/events.js +91 -63
  5. package/dist/client/events.js.map +1 -1
  6. package/dist/client/swap.d.ts +14 -1
  7. package/dist/client/swap.js +185 -7
  8. package/dist/client/swap.js.map +1 -1
  9. package/dist/client/ws.d.ts +1 -0
  10. package/dist/client/ws.js +127 -40
  11. package/dist/client/ws.js.map +1 -1
  12. package/dist/client/ws.test.js +5 -309
  13. package/dist/client/ws.test.js.map +1 -1
  14. package/dist/components/context.d.ts +13 -1
  15. package/dist/components/context.js +312 -1
  16. package/dist/components/context.js.map +1 -1
  17. package/dist/components/context.test.js +73 -116
  18. package/dist/components/context.test.js.map +1 -1
  19. package/dist/components/registry.d.ts +2 -2
  20. package/dist/components/registry.js +52 -4
  21. package/dist/components/registry.js.map +1 -1
  22. package/dist/components/types.d.ts +175 -3
  23. package/dist/engine/executor.js +11 -0
  24. package/dist/engine/executor.js.map +1 -1
  25. package/dist/engine/executor.test.js +19 -10
  26. package/dist/engine/executor.test.js.map +1 -1
  27. package/dist/engine/messages.d.ts +9 -1
  28. package/dist/engine/messages.js.map +1 -1
  29. package/dist/engine/messages.test.d.ts +1 -0
  30. package/dist/engine/messages.test.js +39 -0
  31. package/dist/engine/messages.test.js.map +1 -0
  32. package/dist/engine/renderer.js +211 -7
  33. package/dist/engine/renderer.js.map +1 -1
  34. package/dist/engine/renderer.test.js +218 -234
  35. package/dist/engine/renderer.test.js.map +1 -1
  36. package/dist/engine/server.d.ts +1 -0
  37. package/dist/engine/server.js +41 -5
  38. package/dist/engine/server.js.map +1 -1
  39. package/dist/engine/server.test.js +62 -4
  40. package/dist/engine/server.test.js.map +1 -1
  41. package/dist/engine/watcher.d.ts +17 -1
  42. package/dist/engine/watcher.js +42 -5
  43. package/dist/engine/watcher.js.map +1 -1
  44. package/dist/engine/watcher.test.d.ts +1 -0
  45. package/dist/engine/watcher.test.js +62 -0
  46. package/dist/engine/watcher.test.js.map +1 -0
  47. package/dist/engine/websocket.hub.test.js +24 -0
  48. package/dist/engine/websocket.hub.test.js.map +1 -1
  49. package/dist/engine/websocket.js +0 -1
  50. package/dist/engine/websocket.js.map +1 -1
  51. package/dist/index.d.ts +3 -1
  52. package/dist/index.js +1 -0
  53. package/dist/index.js.map +1 -1
  54. package/package.json +2 -1
@@ -1,316 +1,12 @@
1
1
  import { describe, expect, it } from 'vitest';
2
+ import { applyBatch } from './swap';
2
3
  import { createWSManager } from './ws';
3
- class FakeClassList {
4
- values = new Set();
5
- constructor(initial = []) {
6
- for (const value of initial) {
7
- this.values.add(value);
8
- }
9
- }
10
- add(value) {
11
- this.values.add(value);
12
- }
13
- contains(value) {
14
- return this.values.has(value);
15
- }
16
- toggle(value, force) {
17
- if (force === true) {
18
- this.values.add(value);
19
- return;
20
- }
21
- if (force === false) {
22
- this.values.delete(value);
23
- return;
24
- }
25
- if (this.values.has(value)) {
26
- this.values.delete(value);
27
- }
28
- else {
29
- this.values.add(value);
30
- }
31
- }
32
- }
33
- class FakeElement {
34
- children = [];
35
- classList = new FakeClassList();
36
- dataset = {};
37
- textContent = '';
38
- hidden = false;
39
- id = '';
40
- parent = null;
41
- currentClassName = '';
42
- attrs = new Map();
43
- set className(value) {
44
- this.currentClassName = value;
45
- for (const cls of value.split(/\s+/).filter(Boolean)) {
46
- this.classList.add(cls);
47
- }
48
- }
49
- get className() {
50
- return this.currentClassName;
51
- }
52
- get parentElement() {
53
- return this.parent;
54
- }
55
- get childElementCount() {
56
- return this.children.length;
57
- }
58
- get firstElementChild() {
59
- return this.children[0] ?? null;
60
- }
61
- appendChild(child) {
62
- child.parent = this;
63
- this.children.push(child);
64
- }
65
- remove() {
66
- if (!this.parent) {
67
- return;
68
- }
69
- this.parent.children.splice(this.parent.children.indexOf(this), 1);
70
- this.parent = null;
71
- }
72
- querySelector(selector) {
73
- const classes = (selector.match(/\.[\w-]+/g) ?? []).map((part) => part.slice(1));
74
- const attrMatchers = Array.from(selector.matchAll(/\[([\w-]+)(?:="([^"]*)")?\]/g))
75
- .map((match) => ({ key: match[1], value: match[2] ?? null }));
76
- if (classes.length === 0 && attrMatchers.length === 0) {
77
- return null;
78
- }
79
- const stack = [...this.children];
80
- while (stack.length > 0) {
81
- const current = stack.shift();
82
- const allClassesMatch = classes.every((cls) => current.classList.contains(cls));
83
- const allAttrsMatch = attrMatchers.every(({ key, value }) => {
84
- const got = current.getAttribute(key);
85
- if (value === null) {
86
- return got !== null;
87
- }
88
- return got === value;
89
- });
90
- const allMatch = allClassesMatch && allAttrsMatch;
91
- if (allMatch) {
92
- return current;
93
- }
94
- stack.push(...current.children);
95
- }
96
- return null;
97
- }
98
- querySelectorAll(selector) {
99
- const matches = [];
100
- const classes = (selector.match(/\.[\w-]+/g) ?? []).map((part) => part.slice(1));
101
- const attrMatchers = Array.from(selector.matchAll(/\[([\w-]+)(?:="([^"]*)")?\]/g))
102
- .map((match) => ({ key: match[1], value: match[2] ?? null }));
103
- const stack = [...this.children];
104
- while (stack.length > 0) {
105
- const current = stack.shift();
106
- const allClassesMatch = classes.every((cls) => current.classList.contains(cls));
107
- const allAttrsMatch = attrMatchers.every(({ key, value }) => {
108
- const got = current.getAttribute(key);
109
- if (value === null) {
110
- return got !== null;
111
- }
112
- return got === value;
113
- });
114
- if (allClassesMatch && allAttrsMatch) {
115
- matches.push(current);
116
- }
117
- stack.push(...current.children);
118
- }
119
- return matches;
120
- }
121
- closest(selector) {
122
- const isMatch = (node) => {
123
- if (selector === '[data-lk-id]') {
124
- return node.getAttribute('data-lk-id') !== null;
125
- }
126
- if (selector === '.lk-tabs') {
127
- return node.classList.contains('lk-tabs');
128
- }
129
- if (selector === '.lk-shell[data-lk-id]') {
130
- return node.classList.contains('lk-shell') && node.getAttribute('data-lk-id') !== null;
131
- }
132
- const classes = (selector.match(/\.[\w-]+/g) ?? []).map((part) => part.slice(1));
133
- return classes.length > 0 && classes.every((cls) => node.classList.contains(cls));
134
- };
135
- const search = (node) => {
136
- if (!node) {
137
- return null;
138
- }
139
- if (isMatch(node)) {
140
- return node;
141
- }
142
- return search(node.parent);
143
- };
144
- return search(this);
145
- }
146
- setAttribute(name, value) {
147
- this.attrs.set(name, value);
148
- if (name === 'class') {
149
- this.className = value;
150
- }
151
- if (name === 'id') {
152
- this.id = value;
153
- }
154
- if (name.startsWith('data-')) {
155
- const key = name.slice(5).replace(/-([a-z])/g, (_, c) => c.toUpperCase());
156
- this.dataset[key] = value;
157
- }
158
- if (name === 'hidden') {
159
- this.hidden = true;
160
- }
161
- }
162
- getAttribute(name) {
163
- if (name === 'class') {
164
- return this.className;
165
- }
166
- if (name === 'id') {
167
- return this.id || null;
168
- }
169
- return this.attrs.get(name) ?? null;
170
- }
171
- removeAttribute(name) {
172
- this.attrs.delete(name);
173
- if (name === 'hidden') {
174
- this.hidden = false;
175
- }
176
- }
177
- addEventListener(_type, _listener) {
178
- // no-op for unit tests
179
- }
180
- }
181
- function setupDom() {
182
- const previousWindow = globalThis.window;
183
- const previousDocument = globalThis.document;
184
- const root = new FakeElement();
185
- root.id = 'lk-root';
186
- const toastRoot = new FakeElement();
187
- toastRoot.id = 'lk-toast-root';
188
- const byId = new Map([
189
- ['lk-root', root],
190
- ['lk-toast-root', toastRoot],
191
- ]);
192
- const shell = new FakeElement();
193
- shell.className = 'lk-shell';
194
- shell.setAttribute('data-lk-id', 'shell-1');
195
- const toggle = new FakeElement();
196
- toggle.className = 'lk-shell-mobile-toggle';
197
- toggle.id = 'shell-1-drawer-toggle';
198
- const sidebar = new FakeElement();
199
- sidebar.className = 'lk-shell-sidebar';
200
- shell.appendChild(toggle);
201
- shell.appendChild(sidebar);
202
- root.appendChild(shell);
203
- const fakeDocument = {
204
- documentElement: { setAttribute: () => { } },
205
- addEventListener: () => { },
206
- querySelectorAll: (selector) => root.querySelectorAll(selector),
207
- getElementById: (id) => byId.get(id) ?? null,
208
- createElement: () => new FakeElement(),
209
- };
210
- const storage = new Map();
211
- const fakeWindow = {
212
- location: { protocol: 'http:', host: '127.0.0.1:3500' },
213
- localStorage: {
214
- getItem: (key) => storage.get(key) ?? null,
215
- setItem: (key, value) => {
216
- storage.set(key, value);
217
- },
218
- },
219
- setTimeout,
220
- };
221
- Object.assign(globalThis, {
222
- window: fakeWindow,
223
- document: fakeDocument,
224
- });
225
- return {
226
- document: fakeDocument,
227
- restore: () => {
228
- Object.assign(globalThis, {
229
- window: previousWindow,
230
- document: previousDocument,
231
- });
232
- },
233
- };
234
- }
235
4
  describe('client ws manager', () => {
236
- it('renders toast for TOAST messages (except connection id sentinel)', () => {
237
- const { document, restore } = setupDom();
238
- try {
239
- const sockets = [];
240
- const manager = createWSManager({
241
- wsFactory: (() => {
242
- const socket = {
243
- onopen: null,
244
- onmessage: null,
245
- onclose: null,
246
- send: () => { },
247
- close: () => { },
248
- };
249
- sockets.push(socket);
250
- return socket;
251
- }),
252
- });
253
- manager.connect();
254
- const socketRef = sockets[0];
255
- expect(socketRef).toBeDefined();
256
- if (!socketRef) {
257
- throw new Error('mock socket was not created');
258
- }
259
- socketRef.onmessage?.({
260
- data: JSON.stringify({
261
- type: 'TOAST',
262
- payload: { message: 'hello toast', type: 'success', duration: 5000 },
263
- }),
264
- });
265
- const container = document.getElementById('lk-toast-root');
266
- expect(container).not.toBeNull();
267
- expect(container?.classList.contains('lk-toast-container')).toBe(true);
268
- const toast = container?.querySelector('.lk-toast.lk-toast--success');
269
- expect(toast?.textContent).toBe('hello toast');
270
- }
271
- finally {
272
- restore();
273
- }
5
+ it('exports createWSManager', () => {
6
+ expect(typeof createWSManager).toBe('function');
274
7
  });
275
- it('applies tab state and shell drawer ids on render', () => {
276
- const { document, restore } = setupDom();
277
- try {
278
- const sockets = [];
279
- const manager = createWSManager({
280
- wsFactory: (() => {
281
- const socket = {
282
- onopen: null,
283
- onmessage: null,
284
- onclose: null,
285
- send: () => { },
286
- close: () => { },
287
- };
288
- sockets.push(socket);
289
- return socket;
290
- }),
291
- });
292
- manager.connect();
293
- const socketRef = sockets[0];
294
- if (!socketRef) {
295
- throw new Error('mock socket was not created');
296
- }
297
- socketRef.onmessage?.({
298
- data: JSON.stringify({
299
- type: 'RENDER',
300
- payload: {
301
- title: 'tabs',
302
- theme: 'light',
303
- html: '<div class="lk-tabs" data-lk-id="tabs-1"><nav class="lk-tab-nav"><button class="lk-tab is-active" data-lk-tab-target="One">One</button><button class="lk-tab" data-lk-tab-target="Two">Two</button></nav><section class="lk-tab-panel" data-lk-tab-panel="One">A</section><section class="lk-tab-panel" data-lk-tab-panel="Two" hidden>B</section></div>',
304
- },
305
- }),
306
- });
307
- const sidebars = document.querySelectorAll('.lk-shell-sidebar');
308
- expect(sidebars.length).toBeGreaterThan(0);
309
- expect(sidebars[0]?.id).toBe('lk-shell-sidebar-shell-1');
310
- }
311
- finally {
312
- restore();
313
- }
8
+ it('exposes batch apply helper', () => {
9
+ expect(typeof applyBatch).toBe('function');
314
10
  });
315
11
  });
316
12
  //# sourceMappingURL=ws.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws.test.js","sourceRoot":"","sources":["../../src/client/ws.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.test.js","sourceRoot":"","sources":["../../src/client/ws.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAEvC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { AlertOpts, ButtonCallbackHandle, ButtonHandle, ButtonOpts, ChatHandle, ChatUIOptions, CodeProps, ConnectionScope, FileUploadHandle, FileUploadOpts, GridOpts, ImageGridProps, ImageProps, LoadingOpts, MetricHandle, MetricOpts, NumberInputHandle, NumberInputOpts, ProgressHandle, ProgressOpts, PromptEditorHandle, PromptEditorOpts, SelectHandle, SelectOption, SelectOpts, ShellOpts, ShellRegions, SliderHandle, SliderOpts, StreamHandle, StreamTextOpts, TabDef, TabsHandle, TabsOpts, TableHandle, TableProps, TableRow, TextHandle, TextInputHandle, TextInputOpts, ToggleHandle, ToggleOpts, ToastOpts, UIContext as IUIContext } from './types';
1
+ import type { AccordionOpts, AccordionSection, AlertOpts, AudioProps, BeforeAfterOpts, ButtonCallbackHandle, ButtonHandle, ButtonOpts, ChatHandle, ChatUIOptions, CodeProps, ColorPickerHandle, ColorPickerOpts, ConnectionScope, DateInputHandle, DateInputOpts, DiffProps, FileUploadHandle, FileUploadOpts, FilmStripItem, FilmStripOpts, FullscreenHandle, FullscreenOpts, GridOpts, ImageGridProps, ImageProps, LoadingOpts, MetricHandle, MetricOpts, ModelCompareHandle, ModelCompareOpts, ModelSpec, MultiSelectHandle, MultiSelectOpts, NumberInputHandle, NumberInputOpts, ParameterPanelHandle, ParameterPanelOpts, ParameterSchema, ProgressHandle, ProgressOpts, PromptEditorHandle, PromptEditorOpts, SelectHandle, SelectOption, SelectOpts, ShellOpts, ShellRegions, SliderHandle, SliderOpts, StreamHandle, StreamTextOpts, TabDef, TableHandle, TableProps, TableRow, TabsHandle, TabsOpts, TextHandle, TextInputHandle, TextInputOpts, ToastOpts, ToggleHandle, ToggleOpts, UIContext as IUIContext, VideoProps } from './types';
2
2
  export declare class UIContext implements IUIContext {
3
3
  readonly scope: ConnectionScope;
4
4
  constructor(scope: ConnectionScope);
@@ -17,6 +17,9 @@ export declare class UIContext implements IUIContext {
17
17
  slider(label: string, opts: SliderOpts): SliderHandle;
18
18
  toggle(label: string, opts?: ToggleOpts): ToggleHandle;
19
19
  select(label: string, options: SelectOption[], opts?: SelectOpts): SelectHandle;
20
+ multiSelect(label: string, options: SelectOption[], opts?: MultiSelectOpts): MultiSelectHandle;
21
+ colorPicker(label: string, opts?: ColorPickerOpts): ColorPickerHandle;
22
+ dateInput(label: string, opts?: DateInputOpts): DateInputHandle;
20
23
  fileUpload(label: string, opts?: FileUploadOpts): FileUploadHandle;
21
24
  markdown(content: string): void;
22
25
  image(src: string | null | undefined, opts?: Partial<ImageProps>): void;
@@ -25,10 +28,13 @@ export declare class UIContext implements IUIContext {
25
28
  alt?: string;
26
29
  caption?: string;
27
30
  }>, opts?: Partial<ImageGridProps>): void;
31
+ video(src: string, opts?: VideoProps): void;
32
+ audio(src: string, opts?: AudioProps): void;
28
33
  code(content: string, opts?: Partial<CodeProps>): void;
29
34
  json(data: unknown, opts?: {
30
35
  label?: string;
31
36
  }): void;
37
+ diff(before: string, after: string, opts?: DiffProps): void;
32
38
  table(data: TableRow[], opts?: Partial<TableProps>): TableHandle;
33
39
  private createRowHandle;
34
40
  metric(label: string, value: string, opts?: MetricOpts): MetricHandle;
@@ -37,6 +43,12 @@ export declare class UIContext implements IUIContext {
37
43
  grid(areas: Array<(ctx: IUIContext) => void>, opts?: GridOpts): void;
38
44
  tabs(tabs: TabDef[], opts?: TabsOpts): TabsHandle;
39
45
  card(titleOrContent: string | ((ctx: IUIContext) => void), contentOrNothing?: (ctx: IUIContext) => void): void;
46
+ accordion(sections: AccordionSection[], opts?: AccordionOpts): void;
47
+ fullscreen(content: (ctx: IUIContext) => void, opts?: FullscreenOpts): FullscreenHandle;
48
+ modelCompare(models: ModelSpec[], opts: ModelCompareOpts): ModelCompareHandle;
49
+ parameterPanel(schema: ParameterSchema, opts?: ParameterPanelOpts): ParameterPanelHandle;
50
+ filmStrip(images: Array<string | FilmStripItem>, opts?: FilmStripOpts): void;
51
+ beforeAfter(before: string, after: string, opts?: BeforeAfterOpts): void;
40
52
  divider(opts?: {
41
53
  label?: string;
42
54
  }): void;