@valyrianjs/terminal 0.1.2 → 0.2.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 (62) hide show
  1. package/dist/ansi.d.ts +2 -0
  2. package/dist/ansi.d.ts.map +1 -1
  3. package/dist/ansi.js +12 -0
  4. package/dist/ansi.js.map +1 -1
  5. package/dist/events.d.ts.map +1 -1
  6. package/dist/events.js +6 -2
  7. package/dist/events.js.map +1 -1
  8. package/dist/index.d.ts +2 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/keymap.d.ts.map +1 -1
  12. package/dist/keymap.js +4 -2
  13. package/dist/keymap.js.map +1 -1
  14. package/dist/layout.d.ts.map +1 -1
  15. package/dist/layout.js +2 -1
  16. package/dist/layout.js.map +1 -1
  17. package/dist/mouse.d.ts +6 -0
  18. package/dist/mouse.d.ts.map +1 -1
  19. package/dist/mouse.js +30 -16
  20. package/dist/mouse.js.map +1 -1
  21. package/dist/primitives.d.ts +8 -3
  22. package/dist/primitives.d.ts.map +1 -1
  23. package/dist/primitives.js +8 -1
  24. package/dist/primitives.js.map +1 -1
  25. package/dist/render.d.ts +1 -1
  26. package/dist/render.d.ts.map +1 -1
  27. package/dist/render.js +290 -51
  28. package/dist/render.js.map +1 -1
  29. package/dist/runtime.d.ts.map +1 -1
  30. package/dist/runtime.js +13 -11
  31. package/dist/runtime.js.map +1 -1
  32. package/dist/session.d.ts.map +1 -1
  33. package/dist/session.js +434 -65
  34. package/dist/session.js.map +1 -1
  35. package/dist/theme.d.ts.map +1 -1
  36. package/dist/theme.js +3 -0
  37. package/dist/theme.js.map +1 -1
  38. package/dist/tree.d.ts.map +1 -1
  39. package/dist/tree.js +18 -4
  40. package/dist/tree.js.map +1 -1
  41. package/dist/types.d.ts +61 -13
  42. package/dist/types.d.ts.map +1 -1
  43. package/docs/api-reference.md +40 -28
  44. package/docs/cookbook.md +2 -2
  45. package/docs/core-concepts.md +1 -1
  46. package/docs/interaction-model.md +18 -6
  47. package/docs/primitive-gallery.md +19 -10
  48. package/llms-full.txt +80 -47
  49. package/package.json +1 -1
  50. package/src/ansi.ts +12 -0
  51. package/src/events.ts +4 -2
  52. package/src/index.ts +3 -0
  53. package/src/keymap.ts +4 -2
  54. package/src/layout.ts +2 -1
  55. package/src/mouse.ts +31 -15
  56. package/src/primitives.ts +15 -5
  57. package/src/render.ts +320 -52
  58. package/src/runtime.ts +13 -11
  59. package/src/session.ts +469 -59
  60. package/src/theme.ts +3 -0
  61. package/src/tree.ts +19 -4
  62. package/src/types.ts +72 -12
package/src/theme.ts CHANGED
@@ -101,6 +101,9 @@ export const defaultTerminalTheme: TerminalTheme = {
101
101
  "list.current": {
102
102
  plainPrefix: "> "
103
103
  },
104
+ "list.selected": {
105
+ plainPrefix: "* "
106
+ },
104
107
  focus: {
105
108
  background: "#1f2328"
106
109
  },
package/src/tree.ts CHANGED
@@ -54,12 +54,27 @@ export function resolveToTerminalNodes(input: any): TerminalNode[] {
54
54
  return resolveToTerminalNodes(resolveComponent(input.tag, input.props || {}, input.children || []));
55
55
  }
56
56
 
57
+ const tag = input.tag as TerminalPrimitiveTag;
58
+ const props = { ...(input.props || {}) } as Record<string, any>;
59
+ const vnodeChildren = input.children || [];
60
+ if (tag === "terminal-list" && vnodeChildren.length === 1 && typeof vnodeChildren[0] === "function") {
61
+ props.__childrenRenderer = vnodeChildren[0];
62
+ return [
63
+ {
64
+ type: "element",
65
+ tag,
66
+ props,
67
+ children: []
68
+ }
69
+ ];
70
+ }
71
+
57
72
  return [
58
73
  {
59
74
  type: "element",
60
- tag: input.tag as TerminalPrimitiveTag,
61
- props: (input.props || {}) as Record<string, any>,
62
- children: normalizeChildren(input.children || [])
75
+ tag,
76
+ props,
77
+ children: normalizeChildren(vnodeChildren)
63
78
  }
64
79
  ];
65
80
  }
@@ -106,7 +121,7 @@ export function collectDirectOverlayFocusableNodes(nodes: TerminalNode[], out: T
106
121
 
107
122
  const overlayChildren = node.children.filter((child) => child.type === "element" && child.tag === "terminal-overlay" && child.props.trapFocus !== false);
108
123
  if (overlayChildren.length) {
109
- collectFocusableNodes(overlayChildren, out);
124
+ collectFocusableNodes(overlayChildren.slice().reverse(), out);
110
125
  continue;
111
126
  }
112
127
 
package/src/types.ts CHANGED
@@ -28,6 +28,10 @@ export type TerminalCommandId =
28
28
  | "button.press"
29
29
  | "list.prev"
30
30
  | "list.next"
31
+ | "list.pageUp"
32
+ | "list.pageDown"
33
+ | "list.home"
34
+ | "list.end"
31
35
  | "list.press"
32
36
  | "scroll.up"
33
37
  | "scroll.down"
@@ -126,7 +130,11 @@ export interface TerminalHitbox {
126
130
  textStartX?: number;
127
131
  textLength?: number;
128
132
  itemOffset?: number;
133
+ itemIndexes?: number[];
134
+ contentY?: number;
129
135
  pointerLayer?: number;
136
+ __listItemIndex?: number;
137
+ __pressHandler?: (event: TerminalButtonPressEventPayload) => void;
130
138
  }
131
139
 
132
140
  export interface CursorPosition {
@@ -287,17 +295,32 @@ export interface TerminalEditorCancelEventPayload extends TerminalValueEventPayl
287
295
  }
288
296
 
289
297
  export interface TerminalButtonPressEventPayload extends TerminalEventPayloadBase {
290
- type: "press" | "click";
298
+ type: "press" | "doublepress" | "contextpress";
291
299
  }
292
300
 
293
- export interface TerminalListChangeEventPayload<T = any> extends TerminalValueEventPayloadBase<T> {
301
+ export interface TerminalListStateEventPayload {
302
+ activeIndex: number;
303
+ selectedIndex: number | null;
304
+ viewportOffset: number;
305
+ viewportRows: number;
306
+ }
307
+
308
+ export interface TerminalListChangeEventPayload<T = any> extends TerminalValueEventPayloadBase<T>, TerminalListStateEventPayload {
294
309
  type: "change";
295
310
  index: number;
311
+ key?: string;
312
+ }
313
+
314
+ export interface TerminalListViewportChangeEventPayload extends TerminalEventPayloadBase, TerminalListStateEventPayload {
315
+ type: "viewportchange";
316
+ offset: number;
317
+ rows: number;
296
318
  }
297
319
 
298
- export interface TerminalListPressEventPayload<T = any> extends TerminalValueEventPayloadBase<T> {
299
- type: "press";
320
+ export interface TerminalListPressEventPayload<T = any> extends TerminalValueEventPayloadBase<T>, TerminalListStateEventPayload {
321
+ type: "press" | "doublepress" | "contextpress";
300
322
  index: number;
323
+ key?: string;
301
324
  }
302
325
 
303
326
  export type TerminalChangeEventPayload =
@@ -307,6 +330,16 @@ export type TerminalChangeEventPayload =
307
330
 
308
331
  export type TerminalPressEventPayload = TerminalButtonPressEventPayload | TerminalListPressEventPayload<any>;
309
332
 
333
+ export interface TerminalInputContextPressEventPayload extends TerminalValueEventPayloadBase<string>, TerminalPointerCoordinates {
334
+ type: "contextpress";
335
+ cursor: number;
336
+ }
337
+
338
+ export interface TerminalScrollContextPressEventPayload extends TerminalRowPointerEventPayloadBase {
339
+ type: "contextpress";
340
+ value: string;
341
+ }
342
+
310
343
  export type TerminalMouseEventType = "hover" | "rowenter" | "rowleave";
311
344
 
312
345
  export type TerminalPointerSource = "press" | "drag" | "release";
@@ -324,6 +357,7 @@ export interface TerminalRowPointerEventPayloadBase extends TerminalPointerCoord
324
357
  export interface TerminalListPointerEventPayload<T = any> extends TerminalRowPointerEventPayloadBase {
325
358
  type: TerminalMouseEventType;
326
359
  index: number;
360
+ key?: string;
327
361
  value: T;
328
362
  }
329
363
 
@@ -347,6 +381,7 @@ export interface TerminalInputProps extends TerminalFocusableProps, TerminalStyl
347
381
  onchange?(event: TerminalInputChangeEventPayload): void;
348
382
  oninput?(event: TerminalInputChangeEventPayload): void;
349
383
  onsubmit?(event: TerminalInputSubmitEventPayload): void;
384
+ oncontextpress?(event: TerminalInputContextPressEventPayload): void;
350
385
  }
351
386
 
352
387
  export interface TerminalEditorProps extends TerminalFocusableProps, TerminalStyleProps {
@@ -362,18 +397,38 @@ export interface TerminalEditorProps extends TerminalFocusableProps, TerminalSty
362
397
  export interface TerminalButtonProps extends TerminalFocusableProps, TerminalStyleProps {
363
398
  label?: string;
364
399
  onpress?(event: TerminalButtonPressEventPayload): void;
365
- onclick?(event: TerminalButtonPressEventPayload): void;
366
- action?(event: TerminalButtonPressEventPayload): void;
400
+ ondoublepress?(event: TerminalButtonPressEventPayload): void;
401
+ oncontextpress?(event: TerminalButtonPressEventPayload): void;
367
402
  }
368
403
 
404
+ export interface TerminalListRenderContext<T = any> {
405
+ index: number;
406
+ key: string;
407
+ active: boolean;
408
+ selected: boolean;
409
+ viewportIndex: number;
410
+ item: T;
411
+ }
412
+
413
+ export type TerminalListItemKey<T = any> = (item: T, index: number) => string | number;
414
+ export type TerminalListItemRenderer<T = any> = (item: T, ctx: TerminalListRenderContext<T>) => any;
415
+
369
416
  export interface TerminalListProps<T = any> extends TerminalFocusableProps, TerminalPointerCaptureProps, TerminalStyleProps {
370
- items?: T[];
417
+ items?: readonly T[];
371
418
  virtualized?: boolean;
419
+ height?: number;
372
420
  itemHeight?: 1;
373
421
  overscan?: number;
374
- renderItem?(item: T, index: number): string;
422
+ wrap?: boolean;
423
+ itemKey?: TerminalListItemKey<T>;
424
+ showActive?: boolean;
425
+ renderItem?(item: T, index: number): any;
426
+ children?: TerminalListItemRenderer<T>;
375
427
  onchange?(event: TerminalListChangeEventPayload<T>): void;
428
+ onviewportchange?(event: TerminalListViewportChangeEventPayload): void;
376
429
  onpress?(event: TerminalListPressEventPayload<T>): void;
430
+ ondoublepress?(event: TerminalListPressEventPayload<T>): void;
431
+ oncontextpress?(event: TerminalListPressEventPayload<T>): void;
377
432
  onhover?(event: TerminalListPointerEventPayload<T>): void;
378
433
  onrowenter?(event: TerminalListPointerEventPayload<T>): void;
379
434
  onrowleave?(event: TerminalListPointerEventPayload<T>): void;
@@ -386,6 +441,7 @@ export interface TerminalScrollViewProps extends TerminalLayoutProps, TerminalPo
386
441
  onhover?(event: TerminalScrollPointerEventPayload): void;
387
442
  onrowenter?(event: TerminalScrollPointerEventPayload): void;
388
443
  onrowleave?(event: TerminalScrollPointerEventPayload): void;
444
+ oncontextpress?(event: TerminalScrollContextPressEventPayload): void;
389
445
  oncapturestart?(event: TerminalCaptureEventPayload): void;
390
446
  oncaptureend?(event: TerminalCaptureEventPayload): void;
391
447
  }
@@ -438,11 +494,15 @@ export interface TerminalFixedProps {
438
494
  size: number;
439
495
  }
440
496
 
497
+ export type TerminalOverlayMarginValue = number | `${number}%`;
498
+
499
+ export interface TerminalOverlayMarginAxes {
500
+ x: TerminalOverlayMarginValue;
501
+ y: TerminalOverlayMarginValue;
502
+ }
503
+
441
504
  export interface TerminalOverlayProps extends TerminalFocusableProps, TerminalStyleProps {
442
- x: number;
443
- y: number;
444
- width: number;
445
- height: number;
505
+ margin: TerminalOverlayMarginValue | TerminalOverlayMarginAxes;
446
506
  trapFocus?: boolean;
447
507
  }
448
508