@vui-rs/core 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 (44) hide show
  1. package/README.md +29 -0
  2. package/dist/char-width.d.ts +7 -0
  3. package/dist/char-width.js +20 -0
  4. package/dist/color-names.js +46 -0
  5. package/dist/color.d.ts +5 -0
  6. package/dist/color.js +57 -0
  7. package/dist/image-decode.d.ts +21 -0
  8. package/dist/image-decode.js +42 -0
  9. package/dist/index.d.ts +402 -0
  10. package/dist/index.js +27 -0
  11. package/dist/keys.d.ts +76 -0
  12. package/dist/keys.js +373 -0
  13. package/dist/named-colors.d.ts +7 -0
  14. package/dist/named-colors.js +20 -0
  15. package/dist/native/darwin-arm64/libvui_core.dylib +0 -0
  16. package/dist/native/darwin-x64/libvui_core.dylib +0 -0
  17. package/dist/native/ffi-symbols.d.ts +453 -0
  18. package/dist/native/ffi-symbols.js +680 -0
  19. package/dist/native/linux-arm64/libvui_core.so +0 -0
  20. package/dist/native/linux-x64/libvui_core.so +0 -0
  21. package/dist/native/load-native-lib.d.ts +384 -0
  22. package/dist/native/load-native-lib.js +63 -0
  23. package/dist/native/win32-x64/vui_core.dll +0 -0
  24. package/dist/node.d.ts +61 -0
  25. package/dist/node.js +157 -0
  26. package/dist/offscreen-buffer.d.ts +28 -0
  27. package/dist/offscreen-buffer.js +73 -0
  28. package/dist/renderer.d.ts +106 -0
  29. package/dist/renderer.js +186 -0
  30. package/dist/style.d.ts +48 -0
  31. package/dist/style.js +134 -0
  32. package/dist/terminal-session.d.ts +43 -0
  33. package/dist/terminal-session.js +82 -0
  34. package/dist/text/edit-buffer.d.ts +31 -0
  35. package/dist/text/edit-buffer.js +96 -0
  36. package/dist/text/editor-view.d.ts +22 -0
  37. package/dist/text/editor-view.js +48 -0
  38. package/dist/text/index.d.ts +5 -0
  39. package/dist/text/index.js +5 -0
  40. package/dist/text/text-buffer-view.d.ts +22 -0
  41. package/dist/text/text-buffer-view.js +49 -0
  42. package/dist/text/text-buffer.d.ts +16 -0
  43. package/dist/text/text-buffer.js +43 -0
  44. package/package.json +46 -0
@@ -0,0 +1,680 @@
1
+ import { FFIType } from "bun:ffi";
2
+ //#region src/native/ffi-symbols.ts
3
+ /**
4
+ * FFI ABI contract for vui-core. This file is the single source of truth that
5
+ * MUST stay in lockstep with the `#[unsafe(no_mangle)] extern "C"` exports in
6
+ * `crates/vui-core/src/ffi/` and the `#[repr(C)]` `Cell`. Any change here is an
7
+ * ABI change — bump `ABI_VERSION` in `crates/vui-core/src/lib.rs` and
8
+ * `EXPECTED_ABI_VERSION` below together.
9
+ */
10
+ const EXPECTED_ABI_VERSION = 12;
11
+ /**
12
+ * Size of one native `Cell` in bytes (`ch:u32, fg:Rgba, bg:Rgba, attrs:u16` +
13
+ * padding). The loader verifies this against `vui_cell_size_bytes()` so a JS
14
+ * typed-array view over the back buffer can never silently mis-stride.
15
+ */
16
+ const CELL_BYTES = 16;
17
+ /** Status codes returned by the renderer/buffer exports (`ffi::status`). */
18
+ const Status = {
19
+ OK: 0,
20
+ NULL_PTR: 1,
21
+ PANIC: 2,
22
+ BAD_ARG: 3
23
+ };
24
+ /** Text attribute bitflags, mirroring `buffer::attr` on the Rust side. */
25
+ const Attr = {
26
+ BOLD: 1,
27
+ DIM: 2,
28
+ ITALIC: 4,
29
+ UNDERLINE: 8,
30
+ STRIKETHROUGH: 16,
31
+ INVERSE: 32,
32
+ WIDE_CONTINUATION: 64
33
+ };
34
+ /**
35
+ * Bit position of the OSC 8 link id within a cell's `attrs` (mirrors
36
+ * `buffer::attr::LINK_SHIFT`). The high byte holds the id (1..255, 0 = no link);
37
+ * the host ORs `id << LINK_SHIFT` into a run's attrs and the emitter wraps those
38
+ * cells in a hyperlink. Not an SGR flag — kept out of the low byte deliberately.
39
+ */
40
+ const LINK_SHIFT = 8;
41
+ /**
42
+ * Size of one packed `StyleFfi` in bytes (7 u32 enums + 2 f32 + 25 DimFfi at 8
43
+ * bytes each = 236). The loader verifies this against `vui_style_ffi_size()`, so
44
+ * a drift between the TS packer (`style.ts`) and the Rust struct fails loud.
45
+ */
46
+ const STYLE_FFI_BYTES = 236;
47
+ /** Node kinds for `vui_node_new` (mirrors `node::NodeKind::from_u8`). */
48
+ const NodeKindCode = {
49
+ Box: 1,
50
+ Text: 2,
51
+ Edit: 3
52
+ };
53
+ /** Cursor motion codes for the JS-host edit model (`EditRenderable.move`). */
54
+ const EditMotion = {
55
+ Left: 0,
56
+ Right: 1,
57
+ WordLeft: 2,
58
+ WordRight: 3,
59
+ Home: 4,
60
+ End: 5,
61
+ Up: 6,
62
+ Down: 7,
63
+ DocStart: 8,
64
+ DocEnd: 9
65
+ };
66
+ const NativeTextWrap = {
67
+ None: 0,
68
+ Char: 1,
69
+ Word: 2
70
+ };
71
+ const symbols = {
72
+ vui_version: {
73
+ args: [],
74
+ returns: FFIType.u32
75
+ },
76
+ vui_abi_version: {
77
+ args: [],
78
+ returns: FFIType.u32
79
+ },
80
+ vui_char_width: {
81
+ args: [FFIType.u32],
82
+ returns: FFIType.u32
83
+ },
84
+ vui_renderer_new: {
85
+ args: [FFIType.u32, FFIType.u32],
86
+ returns: FFIType.ptr
87
+ },
88
+ vui_renderer_free: {
89
+ args: [FFIType.ptr],
90
+ returns: FFIType.void
91
+ },
92
+ vui_renderer_resize: {
93
+ args: [
94
+ FFIType.ptr,
95
+ FFIType.u32,
96
+ FFIType.u32
97
+ ],
98
+ returns: FFIType.u32
99
+ },
100
+ vui_renderer_back_buffer_ptr: {
101
+ args: [FFIType.ptr],
102
+ returns: FFIType.ptr
103
+ },
104
+ vui_renderer_buffer_len: {
105
+ args: [FFIType.ptr],
106
+ returns: "usize"
107
+ },
108
+ vui_cell_size_bytes: {
109
+ args: [],
110
+ returns: "usize"
111
+ },
112
+ vui_buffer_draw_text: {
113
+ args: [
114
+ FFIType.ptr,
115
+ FFIType.u32,
116
+ FFIType.u32,
117
+ FFIType.ptr,
118
+ "usize",
119
+ FFIType.u32,
120
+ FFIType.u32,
121
+ FFIType.u16
122
+ ],
123
+ returns: FFIType.u32
124
+ },
125
+ vui_buffer_fill_rect: {
126
+ args: [
127
+ FFIType.ptr,
128
+ FFIType.u32,
129
+ FFIType.u32,
130
+ FFIType.u32,
131
+ FFIType.u32,
132
+ FFIType.u32
133
+ ],
134
+ returns: FFIType.u32
135
+ },
136
+ vui_buffer_set_cell: {
137
+ args: [
138
+ FFIType.ptr,
139
+ FFIType.u32,
140
+ FFIType.u32,
141
+ FFIType.u32,
142
+ FFIType.u32,
143
+ FFIType.u32,
144
+ FFIType.u16
145
+ ],
146
+ returns: FFIType.u32
147
+ },
148
+ vui_buffer_clear: {
149
+ args: [FFIType.ptr, FFIType.u32],
150
+ returns: FFIType.u32
151
+ },
152
+ vui_renderer_render: {
153
+ args: [FFIType.ptr],
154
+ returns: FFIType.u32
155
+ },
156
+ vui_renderer_flush: {
157
+ args: [FFIType.ptr],
158
+ returns: FFIType.u32
159
+ },
160
+ vui_renderer_clear_links: {
161
+ args: [FFIType.ptr],
162
+ returns: FFIType.u32
163
+ },
164
+ vui_renderer_stage_link: {
165
+ args: [
166
+ FFIType.ptr,
167
+ FFIType.u16,
168
+ FFIType.ptr,
169
+ "usize"
170
+ ],
171
+ returns: FFIType.u32
172
+ },
173
+ vui_renderer_stage_passthrough: {
174
+ args: [
175
+ FFIType.ptr,
176
+ FFIType.ptr,
177
+ "usize"
178
+ ],
179
+ returns: FFIType.u32
180
+ },
181
+ vui_image_decode: {
182
+ args: [
183
+ FFIType.ptr,
184
+ "usize",
185
+ FFIType.u32,
186
+ FFIType.u32
187
+ ],
188
+ returns: FFIType.ptr
189
+ },
190
+ vui_renderer_stage_image_placement: {
191
+ args: [
192
+ FFIType.ptr,
193
+ FFIType.u32,
194
+ FFIType.i32,
195
+ FFIType.i32
196
+ ],
197
+ returns: FFIType.u32
198
+ },
199
+ vui_renderer_clear_image_placements: {
200
+ args: [FFIType.ptr],
201
+ returns: FFIType.u32
202
+ },
203
+ vui_image_decode_bytes: {
204
+ args: [
205
+ FFIType.ptr,
206
+ "usize",
207
+ FFIType.u32,
208
+ FFIType.u32
209
+ ],
210
+ returns: FFIType.ptr
211
+ },
212
+ vui_image_width: {
213
+ args: [FFIType.ptr],
214
+ returns: FFIType.u32
215
+ },
216
+ vui_image_height: {
217
+ args: [FFIType.ptr],
218
+ returns: FFIType.u32
219
+ },
220
+ vui_image_rgba_ptr: {
221
+ args: [FFIType.ptr],
222
+ returns: FFIType.ptr
223
+ },
224
+ vui_image_rgba_len: {
225
+ args: [FFIType.ptr],
226
+ returns: "usize"
227
+ },
228
+ vui_image_free: {
229
+ args: [FFIType.ptr],
230
+ returns: FFIType.void
231
+ },
232
+ vui_buffer_draw_text_clipped: {
233
+ args: [
234
+ FFIType.ptr,
235
+ FFIType.i32,
236
+ FFIType.i32,
237
+ FFIType.ptr,
238
+ "usize",
239
+ FFIType.u32,
240
+ FFIType.u32,
241
+ FFIType.u16,
242
+ FFIType.ptr
243
+ ],
244
+ returns: FFIType.u32
245
+ },
246
+ vui_buffer_fill_rect_clipped: {
247
+ args: [
248
+ FFIType.ptr,
249
+ FFIType.i32,
250
+ FFIType.i32,
251
+ FFIType.u32,
252
+ FFIType.u32,
253
+ FFIType.u32,
254
+ FFIType.ptr
255
+ ],
256
+ returns: FFIType.u32
257
+ },
258
+ vui_buffer_set_cell_clipped: {
259
+ args: [
260
+ FFIType.ptr,
261
+ FFIType.i32,
262
+ FFIType.i32,
263
+ FFIType.u32,
264
+ FFIType.u32,
265
+ FFIType.u32,
266
+ FFIType.u16,
267
+ FFIType.ptr
268
+ ],
269
+ returns: FFIType.u32
270
+ },
271
+ vui_buffer_blit: {
272
+ args: [
273
+ FFIType.ptr,
274
+ FFIType.ptr,
275
+ FFIType.i32,
276
+ FFIType.i32,
277
+ FFIType.ptr
278
+ ],
279
+ returns: FFIType.u32
280
+ },
281
+ vui_buffer_draw_textbuffer: {
282
+ args: [
283
+ FFIType.ptr,
284
+ FFIType.ptr,
285
+ FFIType.i32,
286
+ FFIType.i32,
287
+ FFIType.u32,
288
+ FFIType.u32,
289
+ FFIType.u8,
290
+ FFIType.u16,
291
+ FFIType.ptr
292
+ ],
293
+ returns: FFIType.u32
294
+ },
295
+ vui_buffer_draw_editor: {
296
+ args: [
297
+ FFIType.ptr,
298
+ FFIType.ptr,
299
+ FFIType.i32,
300
+ FFIType.i32,
301
+ FFIType.u32,
302
+ FFIType.u32,
303
+ FFIType.u32,
304
+ FFIType.u16,
305
+ FFIType.ptr
306
+ ],
307
+ returns: FFIType.u32
308
+ },
309
+ vui_textbuf_new: {
310
+ args: [],
311
+ returns: FFIType.ptr
312
+ },
313
+ vui_textbuf_free: {
314
+ args: [FFIType.ptr],
315
+ returns: FFIType.void
316
+ },
317
+ vui_textbuf_set_text: {
318
+ args: [
319
+ FFIType.ptr,
320
+ FFIType.ptr,
321
+ "usize"
322
+ ],
323
+ returns: FFIType.u32
324
+ },
325
+ vui_textbuf_set_runs: {
326
+ args: [
327
+ FFIType.ptr,
328
+ FFIType.ptr,
329
+ "usize",
330
+ FFIType.ptr,
331
+ "usize"
332
+ ],
333
+ returns: FFIType.u32
334
+ },
335
+ vui_textbuf_line_count: {
336
+ args: [FFIType.ptr],
337
+ returns: FFIType.u32
338
+ },
339
+ vui_textbuf_length: {
340
+ args: [FFIType.ptr],
341
+ returns: FFIType.u32
342
+ },
343
+ vui_textview_new: {
344
+ args: [FFIType.ptr],
345
+ returns: FFIType.ptr
346
+ },
347
+ vui_textview_free: {
348
+ args: [FFIType.ptr],
349
+ returns: FFIType.void
350
+ },
351
+ vui_textview_set_wrap: {
352
+ args: [FFIType.ptr, FFIType.u8],
353
+ returns: FFIType.u32
354
+ },
355
+ vui_textview_set_width: {
356
+ args: [FFIType.ptr, FFIType.u32],
357
+ returns: FFIType.u32
358
+ },
359
+ vui_textview_measure: {
360
+ args: [
361
+ FFIType.ptr,
362
+ FFIType.u32,
363
+ FFIType.u8,
364
+ FFIType.ptr
365
+ ],
366
+ returns: FFIType.u32
367
+ },
368
+ vui_editbuf_new: {
369
+ args: [],
370
+ returns: FFIType.ptr
371
+ },
372
+ vui_editbuf_free: {
373
+ args: [FFIType.ptr],
374
+ returns: FFIType.void
375
+ },
376
+ vui_editbuf_set_value: {
377
+ args: [
378
+ FFIType.ptr,
379
+ FFIType.ptr,
380
+ "usize"
381
+ ],
382
+ returns: FFIType.u32
383
+ },
384
+ vui_editbuf_value_len: {
385
+ args: [FFIType.ptr],
386
+ returns: "usize"
387
+ },
388
+ vui_editbuf_copy_value: {
389
+ args: [
390
+ FFIType.ptr,
391
+ FFIType.ptr,
392
+ "usize"
393
+ ],
394
+ returns: "usize"
395
+ },
396
+ vui_editbuf_insert: {
397
+ args: [
398
+ FFIType.ptr,
399
+ FFIType.ptr,
400
+ "usize"
401
+ ],
402
+ returns: FFIType.u32
403
+ },
404
+ vui_editbuf_backspace: {
405
+ args: [FFIType.ptr],
406
+ returns: FFIType.u32
407
+ },
408
+ vui_editbuf_delete: {
409
+ args: [FFIType.ptr],
410
+ returns: FFIType.u32
411
+ },
412
+ vui_editbuf_newline: {
413
+ args: [FFIType.ptr],
414
+ returns: FFIType.u32
415
+ },
416
+ vui_editbuf_move: {
417
+ args: [
418
+ FFIType.ptr,
419
+ FFIType.u8,
420
+ FFIType.u8
421
+ ],
422
+ returns: FFIType.u32
423
+ },
424
+ vui_editbuf_select_all: {
425
+ args: [FFIType.ptr],
426
+ returns: FFIType.u32
427
+ },
428
+ vui_editbuf_has_selection: {
429
+ args: [FFIType.ptr],
430
+ returns: FFIType.u32
431
+ },
432
+ vui_editbuf_selected_len: {
433
+ args: [FFIType.ptr],
434
+ returns: "usize"
435
+ },
436
+ vui_editbuf_copy_selected: {
437
+ args: [
438
+ FFIType.ptr,
439
+ FFIType.ptr,
440
+ "usize"
441
+ ],
442
+ returns: "usize"
443
+ },
444
+ vui_editbuf_delete_selection: {
445
+ args: [FFIType.ptr, FFIType.ptr],
446
+ returns: FFIType.u32
447
+ },
448
+ vui_editbuf_undo: {
449
+ args: [FFIType.ptr, FFIType.ptr],
450
+ returns: FFIType.u32
451
+ },
452
+ vui_editbuf_redo: {
453
+ args: [FFIType.ptr, FFIType.ptr],
454
+ returns: FFIType.u32
455
+ },
456
+ vui_editbuf_can_undo: {
457
+ args: [FFIType.ptr],
458
+ returns: FFIType.u32
459
+ },
460
+ vui_editbuf_can_redo: {
461
+ args: [FFIType.ptr],
462
+ returns: FFIType.u32
463
+ },
464
+ vui_editbuf_cursor: {
465
+ args: [
466
+ FFIType.ptr,
467
+ FFIType.ptr,
468
+ FFIType.ptr
469
+ ],
470
+ returns: FFIType.u32
471
+ },
472
+ vui_editor_new: {
473
+ args: [
474
+ FFIType.ptr,
475
+ FFIType.u32,
476
+ FFIType.u32
477
+ ],
478
+ returns: FFIType.ptr
479
+ },
480
+ vui_editor_free: {
481
+ args: [FFIType.ptr],
482
+ returns: FFIType.void
483
+ },
484
+ vui_editor_set_wrap: {
485
+ args: [FFIType.ptr, FFIType.u8],
486
+ returns: FFIType.u32
487
+ },
488
+ vui_editor_set_viewport: {
489
+ args: [
490
+ FFIType.ptr,
491
+ FFIType.u32,
492
+ FFIType.u32
493
+ ],
494
+ returns: FFIType.u32
495
+ },
496
+ vui_editor_set_focused: {
497
+ args: [FFIType.ptr, FFIType.u8],
498
+ returns: FFIType.u32
499
+ },
500
+ vui_editor_move: {
501
+ args: [
502
+ FFIType.ptr,
503
+ FFIType.u8,
504
+ FFIType.u8
505
+ ],
506
+ returns: FFIType.u32
507
+ },
508
+ vui_editor_measure: {
509
+ args: [
510
+ FFIType.ptr,
511
+ FFIType.u32,
512
+ FFIType.u8,
513
+ FFIType.ptr
514
+ ],
515
+ returns: FFIType.u32
516
+ },
517
+ vui_cbuf_new: {
518
+ args: [FFIType.u32, FFIType.u32],
519
+ returns: FFIType.ptr
520
+ },
521
+ vui_cbuf_free: {
522
+ args: [FFIType.ptr],
523
+ returns: FFIType.void
524
+ },
525
+ vui_cbuf_resize: {
526
+ args: [
527
+ FFIType.ptr,
528
+ FFIType.u32,
529
+ FFIType.u32
530
+ ],
531
+ returns: FFIType.u32
532
+ },
533
+ vui_cbuf_ptr: {
534
+ args: [FFIType.ptr],
535
+ returns: FFIType.ptr
536
+ },
537
+ vui_cbuf_len: {
538
+ args: [FFIType.ptr],
539
+ returns: "usize"
540
+ },
541
+ vui_cbuf_clear: {
542
+ args: [FFIType.ptr, FFIType.u32],
543
+ returns: FFIType.u32
544
+ },
545
+ vui_cbuf_draw_text: {
546
+ args: [
547
+ FFIType.ptr,
548
+ FFIType.u32,
549
+ FFIType.u32,
550
+ FFIType.ptr,
551
+ "usize",
552
+ FFIType.u32,
553
+ FFIType.u32,
554
+ FFIType.u16
555
+ ],
556
+ returns: FFIType.u32
557
+ },
558
+ vui_cbuf_fill_rect: {
559
+ args: [
560
+ FFIType.ptr,
561
+ FFIType.u32,
562
+ FFIType.u32,
563
+ FFIType.u32,
564
+ FFIType.u32,
565
+ FFIType.u32
566
+ ],
567
+ returns: FFIType.u32
568
+ },
569
+ vui_cbuf_set_cell: {
570
+ args: [
571
+ FFIType.ptr,
572
+ FFIType.u32,
573
+ FFIType.u32,
574
+ FFIType.u32,
575
+ FFIType.u32,
576
+ FFIType.u32,
577
+ FFIType.u16
578
+ ],
579
+ returns: FFIType.u32
580
+ },
581
+ vui_renderer_set_root: {
582
+ args: [FFIType.ptr],
583
+ returns: FFIType.u32
584
+ },
585
+ vui_node_new: {
586
+ args: [FFIType.ptr, FFIType.u8],
587
+ returns: FFIType.u32
588
+ },
589
+ vui_node_free: {
590
+ args: [FFIType.ptr, FFIType.u32],
591
+ returns: FFIType.u32
592
+ },
593
+ vui_node_append_child: {
594
+ args: [
595
+ FFIType.ptr,
596
+ FFIType.u32,
597
+ FFIType.u32
598
+ ],
599
+ returns: FFIType.u32
600
+ },
601
+ vui_node_insert_before: {
602
+ args: [
603
+ FFIType.ptr,
604
+ FFIType.u32,
605
+ FFIType.u32,
606
+ FFIType.u32
607
+ ],
608
+ returns: FFIType.u32
609
+ },
610
+ vui_node_remove_child: {
611
+ args: [
612
+ FFIType.ptr,
613
+ FFIType.u32,
614
+ FFIType.u32
615
+ ],
616
+ returns: FFIType.u32
617
+ },
618
+ vui_node_set_text: {
619
+ args: [
620
+ FFIType.ptr,
621
+ FFIType.u32,
622
+ FFIType.ptr,
623
+ "usize"
624
+ ],
625
+ returns: FFIType.u32
626
+ },
627
+ vui_node_set_text_runs: {
628
+ args: [
629
+ FFIType.ptr,
630
+ FFIType.u32,
631
+ FFIType.ptr,
632
+ "usize",
633
+ FFIType.ptr,
634
+ "usize"
635
+ ],
636
+ returns: FFIType.u32
637
+ },
638
+ vui_node_set_text_wrap: {
639
+ args: [
640
+ FFIType.ptr,
641
+ FFIType.u32,
642
+ FFIType.u8
643
+ ],
644
+ returns: FFIType.u32
645
+ },
646
+ vui_node_set_style: {
647
+ args: [
648
+ FFIType.ptr,
649
+ FFIType.u32,
650
+ FFIType.ptr
651
+ ],
652
+ returns: FFIType.u32
653
+ },
654
+ vui_style_ffi_size: {
655
+ args: [],
656
+ returns: "usize"
657
+ },
658
+ vui_debug_tree_hash: {
659
+ args: [FFIType.ptr],
660
+ returns: FFIType.u64
661
+ },
662
+ vui_layout_compute: {
663
+ args: [
664
+ FFIType.ptr,
665
+ FFIType.u32,
666
+ FFIType.u32
667
+ ],
668
+ returns: FFIType.u32
669
+ },
670
+ vui_node_rect: {
671
+ args: [
672
+ FFIType.ptr,
673
+ FFIType.u32,
674
+ FFIType.ptr
675
+ ],
676
+ returns: FFIType.u32
677
+ }
678
+ };
679
+ //#endregion
680
+ export { Attr, CELL_BYTES, EXPECTED_ABI_VERSION, EditMotion, LINK_SHIFT, NativeTextWrap, NodeKindCode, STYLE_FFI_BYTES, Status, symbols };