@opentui/solid 0.1.24 → 0.1.26

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.
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- export function useTimeline(timeline: any, initialValue: any, targetValue: any, options: any, startTime?: number): import("solid-js").Accessor<any>;
1
+ export function useTimeline(options?: {}): Timeline;
2
2
  export function useTerminalDimensions(): import("solid-js").Accessor<{
3
3
  width: any;
4
4
  height: any;
5
5
  }>;
6
6
  export function useSelectionHandler(callback: any): void;
7
7
  export function useRenderer(): any;
8
+ export function usePaste(callback: any): void;
8
9
  export function useKeyboard(callback: any): void;
9
10
  export function useKeyHandler(callback: any): void;
10
11
  export function use(fn: any, element: any, arg: any): any;
@@ -15,6 +16,7 @@ export function testRender(node: any, renderConfig?: {}): Promise<{
15
16
  mockMouse: import("@opentui/core/testing").MockMouse;
16
17
  renderOnce: () => Promise<void>;
17
18
  captureCharFrame: () => string;
19
+ resize: (width: number, height: number) => void;
18
20
  }>;
19
21
  export function spread(node: any, accessor: any, skipChildren: any): void;
20
22
  export function setProp(node: any, name: any, value: any, prev: any): any;
@@ -32,6 +34,7 @@ export function getComponentCatalogue(): {
32
34
  ascii_font: typeof ASCIIFontRenderable;
33
35
  tab_select: typeof TabSelectRenderable2;
34
36
  scrollbox: typeof ScrollBoxRenderable;
37
+ code: typeof CodeRenderable;
35
38
  span: typeof SpanRenderable;
36
39
  strong: typeof BoldSpanRenderable;
37
40
  b: typeof BoldSpanRenderable;
@@ -46,7 +49,6 @@ export var createTextNode: any;
46
49
  export function createSlotNode(): SlotRenderable;
47
50
  export var createElement: any;
48
51
  export function createDynamic(component: any, props: any): import("solid-js").Accessor<any>;
49
- export function createComponentTimeline(options?: {}): Timeline;
50
52
  declare var createComponent2: typeof createComponent;
51
53
  export namespace componentCatalogue {
52
54
  export { BoxRenderable as box };
@@ -56,6 +58,7 @@ export namespace componentCatalogue {
56
58
  export { ASCIIFontRenderable as ascii_font };
57
59
  export { TabSelectRenderable2 as tab_select };
58
60
  export { ScrollBoxRenderable as scrollbox };
61
+ export { CodeRenderable as code };
59
62
  export { SpanRenderable as span };
60
63
  export { BoldSpanRenderable as strong };
61
64
  export { BoldSpanRenderable as b };
@@ -102,6 +105,7 @@ export function Dynamic(props: any): import("solid-js").Accessor<any>;
102
105
  export class BoldSpanRenderable extends TextModifierRenderable {
103
106
  constructor(options: any);
104
107
  }
108
+ import { Timeline } from "@opentui/core";
105
109
  import { mergeProps } from "solid-js";
106
110
  import { BoxRenderable } from "@opentui/core";
107
111
  import { TextRenderable as TextRenderable3 } from "@opentui/core";
@@ -110,12 +114,12 @@ import { SelectRenderable as SelectRenderable2 } from "@opentui/core";
110
114
  import { ASCIIFontRenderable } from "@opentui/core";
111
115
  import { TabSelectRenderable as TabSelectRenderable2 } from "@opentui/core";
112
116
  import { ScrollBoxRenderable } from "@opentui/core";
117
+ import { CodeRenderable } from "@opentui/core";
113
118
  declare class SpanRenderable extends TextNodeRenderable3 {
114
119
  constructor(_ctx: any, options: any);
115
120
  _ctx: any;
116
121
  }
117
122
  import { createRenderEffect } from "solid-js";
118
- import { Timeline } from "@opentui/core";
119
123
  import { createComponent } from "solid-js";
120
124
  declare class TextModifierRenderable extends SpanRenderable {
121
125
  }
@@ -126,6 +130,7 @@ declare class SlotBaseRenderable extends BaseRenderable {
126
130
  remove(id: any): void;
127
131
  insertBefore(obj: any, anchor: any): void;
128
132
  getRenderable(id: any): void;
133
+ findDescendantById(id: any): void;
129
134
  }
130
135
  import { Yoga } from "@opentui/core";
131
136
  import { BaseRenderable } from "@opentui/core";
package/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export declare const testRender: (node: () => JSX.Element, renderConfig?: TestRe
8
8
  mockMouse: import("@opentui/core/testing").MockMouse;
9
9
  renderOnce: () => Promise<void>;
10
10
  captureCharFrame: () => string;
11
+ resize: (width: number, height: number) => void;
11
12
  }>;
12
13
  export * from "./src/reconciler";
13
14
  export * from "./src/elements";
package/index.js CHANGED
@@ -1,12 +1,13 @@
1
1
  // @bun
2
2
  // index.ts
3
- import { createCliRenderer } from "@opentui/core";
3
+ import { createCliRenderer, engine as engine2 } from "@opentui/core";
4
4
  import { createTestRenderer } from "@opentui/core/testing";
5
5
 
6
6
  // src/elements/index.ts
7
7
  import {
8
8
  ASCIIFontRenderable,
9
9
  BoxRenderable,
10
+ CodeRenderable,
10
11
  InputRenderable as InputRenderable2,
11
12
  ScrollBoxRenderable,
12
13
  SelectRenderable as SelectRenderable2,
@@ -18,7 +19,7 @@ import {
18
19
 
19
20
  // src/elements/hooks.ts
20
21
  import {
21
- getKeyHandler,
22
+ engine,
22
23
  Timeline
23
24
  } from "@opentui/core";
24
25
  import { createContext, createSignal, onCleanup, onMount, useContext } from "solid-js";
@@ -49,7 +50,8 @@ var useTerminalDimensions = () => {
49
50
  return terminalDimensions;
50
51
  };
51
52
  var useKeyboard = (callback) => {
52
- const keyHandler = getKeyHandler();
53
+ const renderer = useRenderer();
54
+ const keyHandler = renderer.keyInput;
53
55
  onMount(() => {
54
56
  keyHandler.on("keypress", callback);
55
57
  });
@@ -57,6 +59,16 @@ var useKeyboard = (callback) => {
57
59
  keyHandler.off("keypress", callback);
58
60
  });
59
61
  };
62
+ var usePaste = (callback) => {
63
+ const renderer = useRenderer();
64
+ const keyHandler = renderer.keyInput;
65
+ onMount(() => {
66
+ keyHandler.on("paste", callback);
67
+ });
68
+ onCleanup(() => {
69
+ keyHandler.off("paste", callback);
70
+ });
71
+ };
60
72
  var useKeyHandler = useKeyboard;
61
73
  var useSelectionHandler = (callback) => {
62
74
  const renderer = useRenderer();
@@ -67,35 +79,20 @@ var useSelectionHandler = (callback) => {
67
79
  renderer.off("selection", callback);
68
80
  });
69
81
  };
70
- var createComponentTimeline = (options = {}) => {
71
- const renderer = useRenderer();
82
+ var useTimeline = (options = {}) => {
72
83
  const timeline = new Timeline(options);
73
- const frameCallback = async (dt) => timeline.update(dt);
74
84
  onMount(() => {
75
85
  if (options.autoplay !== false) {
76
86
  timeline.play();
77
87
  }
78
- renderer.setFrameCallback(frameCallback);
88
+ engine.register(timeline);
79
89
  });
80
90
  onCleanup(() => {
81
- renderer.removeFrameCallback(frameCallback);
82
91
  timeline.pause();
92
+ engine.unregister(timeline);
83
93
  });
84
94
  return timeline;
85
95
  };
86
- var useTimeline = (timeline, initialValue, targetValue, options, startTime = 0) => {
87
- const [store, setStore] = createSignal(initialValue);
88
- const { onUpdate, ...animationOptions } = options;
89
- timeline.add(store(), {
90
- ...targetValue,
91
- ...animationOptions,
92
- onUpdate: (values) => {
93
- setStore({ ...values.targets[0] });
94
- onUpdate?.(values);
95
- }
96
- }, startTime);
97
- return store;
98
- };
99
96
  // src/elements/extras.ts
100
97
  import { createEffect, createMemo as createMemo2, getOwner, onCleanup as onCleanup2, runWithOwner, splitProps, untrack as untrack2 } from "solid-js";
101
98
 
@@ -297,7 +294,7 @@ function createRenderer({
297
294
  while (removed = getFirstChild(parent))
298
295
  removeNode(parent, removed);
299
296
  replacement && insertNode(parent, replacement);
300
- return "";
297
+ return replacement;
301
298
  }
302
299
  const node = replacement || createSlotNode();
303
300
  if (current.length) {
@@ -428,6 +425,7 @@ var getNodeChildren = (node) => {
428
425
  function _insertNode(parent, node, anchor) {
429
426
  log("Inserting node:", logId(node), "into parent:", logId(parent), "with anchor:", logId(anchor), node instanceof TextNode);
430
427
  if (node instanceof SlotRenderable) {
428
+ node.parent = parent;
431
429
  node = node.getSlotChild(parent);
432
430
  }
433
431
  if (anchor && anchor instanceof SlotRenderable) {
@@ -456,6 +454,7 @@ function _insertNode(parent, node, anchor) {
456
454
  function _removeNode(parent, node) {
457
455
  log("Removing node:", logId(node), "from parent:", logId(parent));
458
456
  if (node instanceof SlotRenderable) {
457
+ node.parent = null;
459
458
  node = node.getSlotChild(parent);
460
459
  }
461
460
  if (isTextNodeRenderable(parent)) {
@@ -553,6 +552,10 @@ var {
553
552
  return;
554
553
  }
555
554
  switch (name) {
555
+ case "id":
556
+ log("Id mapped", node.id, "=", value);
557
+ node[name] = value;
558
+ break;
556
559
  case "focused":
557
560
  if (!(node instanceof Renderable))
558
561
  return;
@@ -656,7 +659,7 @@ var {
656
659
  log("No parent found for node:", logId(node));
657
660
  return;
658
661
  }
659
- const siblings = getNodeChildren(node);
662
+ const siblings = getNodeChildren(parent);
660
663
  const index = siblings.indexOf(node);
661
664
  if (index === -1 || index === siblings.length - 1) {
662
665
  log("No next sibling found for node:", logId(node));
@@ -740,6 +743,9 @@ class SlotBaseRenderable extends BaseRenderable2 {
740
743
  return 0;
741
744
  }
742
745
  requestRender() {}
746
+ findDescendantById(id) {
747
+ return;
748
+ }
743
749
  }
744
750
 
745
751
  class TextSlotRenderable extends TextNodeRenderable2 {
@@ -880,6 +886,7 @@ var baseComponents = {
880
886
  ascii_font: ASCIIFontRenderable,
881
887
  tab_select: TabSelectRenderable2,
882
888
  scrollbox: ScrollBoxRenderable,
889
+ code: CodeRenderable,
883
890
  span: SpanRenderable,
884
891
  strong: BoldSpanRenderable,
885
892
  b: BoldSpanRenderable,
@@ -899,6 +906,7 @@ function getComponentCatalogue() {
899
906
  // index.ts
900
907
  var render = async (node, renderConfig = {}) => {
901
908
  const renderer = await createCliRenderer(renderConfig);
909
+ engine2.attach(renderer);
902
910
  _render(() => createComponent2(RendererContext.Provider, {
903
911
  get value() {
904
912
  return renderer;
@@ -910,6 +918,7 @@ var render = async (node, renderConfig = {}) => {
910
918
  };
911
919
  var testRender = async (node, renderConfig = {}) => {
912
920
  const testSetup = await createTestRenderer(renderConfig);
921
+ engine2.attach(testSetup.renderer);
913
922
  _render(() => createComponent2(RendererContext.Provider, {
914
923
  get value() {
915
924
  return testSetup.renderer;
@@ -925,6 +934,7 @@ export {
925
934
  useTerminalDimensions,
926
935
  useSelectionHandler,
927
936
  useRenderer,
937
+ usePaste,
928
938
  useKeyboard,
929
939
  useKeyHandler,
930
940
  use,
@@ -945,7 +955,6 @@ export {
945
955
  createSlotNode,
946
956
  createElement,
947
957
  createDynamic,
948
- createComponentTimeline,
949
958
  createComponent2 as createComponent,
950
959
  componentCatalogue,
951
960
  baseComponents,
package/jsx-runtime.d.ts CHANGED
@@ -2,6 +2,7 @@ import { Renderable } from "@opentui/core"
2
2
  import type {
3
3
  AsciiFontProps,
4
4
  BoxProps,
5
+ CodeProps,
5
6
  ExtendedIntrinsicElements,
6
7
  InputProps,
7
8
  OpenTUIComponents,
@@ -28,6 +29,7 @@ declare namespace JSX {
28
29
  ascii_font: AsciiFontProps
29
30
  tab_select: TabSelectProps
30
31
  scrollbox: ScrollBoxProps
32
+ code: CodeProps
31
33
 
32
34
  b: SpanProps
33
35
  strong: SpanProps
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.1.24",
7
+ "version": "0.1.26",
8
8
  "description": "SolidJS renderer for OpenTUI",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "dependencies": {
28
28
  "@babel/core": "7.28.0",
29
29
  "@babel/preset-typescript": "7.27.1",
30
- "@opentui/core": "0.1.24",
30
+ "@opentui/core": "0.1.26",
31
31
  "babel-plugin-module-resolver": "5.0.2",
32
32
  "babel-preset-solid": "1.9.9",
33
33
  "s-js": "^0.4.9"
@@ -1,4 +1,4 @@
1
- import { Selection, Timeline, type AnimationOptions, type CliRenderer, type JSAnimation, type ParsedKey, type TimelineOptions } from "@opentui/core";
1
+ import { PasteEvent, Selection, Timeline, type CliRenderer, type KeyEvent, type TimelineOptions } from "@opentui/core";
2
2
  export declare const RendererContext: import("solid-js").Context<CliRenderer | undefined>;
3
3
  export declare const useRenderer: () => CliRenderer;
4
4
  export declare const onResize: (callback: (width: number, height: number) => void) => void;
@@ -6,15 +6,11 @@ export declare const useTerminalDimensions: () => import("solid-js").Accessor<{
6
6
  width: number;
7
7
  height: number;
8
8
  }>;
9
- export declare const useKeyboard: (callback: (key: ParsedKey) => void) => void;
9
+ export declare const useKeyboard: (callback: (key: KeyEvent) => void) => void;
10
+ export declare const usePaste: (callback: (event: PasteEvent) => void) => void;
10
11
  /**
11
12
  * @deprecated renamed to useKeyboard
12
13
  */
13
- export declare const useKeyHandler: (callback: (key: ParsedKey) => void) => void;
14
+ export declare const useKeyHandler: (callback: (key: KeyEvent) => void) => void;
14
15
  export declare const useSelectionHandler: (callback: (selection: Selection) => void) => void;
15
- export declare const createComponentTimeline: (options?: TimelineOptions) => Timeline;
16
- export declare const useTimeline: <T extends Record<string, number>>(timeline: Timeline, initialValue: T, targetValue: T, options: AnimationOptions & {
17
- onUpdate?: (values: JSAnimation & {
18
- targets: T[];
19
- }) => void;
20
- }, startTime?: number | string) => import("solid-js").Accessor<T>;
16
+ export declare const useTimeline: (options?: TimelineOptions) => Timeline;
@@ -1,4 +1,4 @@
1
- import { ASCIIFontRenderable, BoxRenderable, InputRenderable, ScrollBoxRenderable, SelectRenderable, TabSelectRenderable, TextNodeRenderable, TextRenderable, type RenderContext, type TextNodeOptions } from "@opentui/core";
1
+ import { ASCIIFontRenderable, BoxRenderable, CodeRenderable, InputRenderable, ScrollBoxRenderable, SelectRenderable, TabSelectRenderable, TextNodeRenderable, TextRenderable, type RenderContext, type TextNodeOptions } from "@opentui/core";
2
2
  import type { RenderableConstructor } from "../types/elements";
3
3
  export * from "./hooks";
4
4
  export * from "./extras";
@@ -33,6 +33,7 @@ export declare const baseComponents: {
33
33
  ascii_font: typeof ASCIIFontRenderable;
34
34
  tab_select: typeof TabSelectRenderable;
35
35
  scrollbox: typeof ScrollBoxRenderable;
36
+ code: typeof CodeRenderable;
36
37
  span: typeof SpanRenderable;
37
38
  strong: typeof BoldSpanRenderable;
38
39
  b: typeof BoldSpanRenderable;
@@ -8,6 +8,7 @@ declare class SlotBaseRenderable extends BaseRenderable {
8
8
  getRenderable(id: string): BaseRenderable | undefined;
9
9
  getChildrenCount(): number;
10
10
  requestRender(): void;
11
+ findDescendantById(id: string): BaseRenderable | undefined;
11
12
  }
12
13
  export declare class TextSlotRenderable extends TextNodeRenderable {
13
14
  protected slotParent?: SlotRenderable;
@@ -1,4 +1,4 @@
1
- import type { ASCIIFontOptions, ASCIIFontRenderable, BaseRenderable, BoxOptions, BoxRenderable, InputRenderable, InputRenderableOptions, RenderableOptions, RenderContext, ScrollBoxOptions, ScrollBoxRenderable, SelectOption, SelectRenderable, SelectRenderableOptions, TabSelectOption, TabSelectRenderable, TabSelectRenderableOptions, TextNodeRenderable, TextOptions, TextRenderable } from "@opentui/core";
1
+ import type { ASCIIFontOptions, ASCIIFontRenderable, BaseRenderable, BoxOptions, BoxRenderable, CodeOptions, CodeRenderable, InputRenderable, InputRenderableOptions, RenderableOptions, RenderContext, ScrollBoxOptions, ScrollBoxRenderable, SelectOption, SelectRenderable, SelectRenderableOptions, TabSelectOption, TabSelectRenderable, TabSelectRenderableOptions, TextNodeRenderable, TextOptions, TextRenderable } from "@opentui/core";
2
2
  import type { Ref } from "solid-js";
3
3
  import type { JSX } from "../../jsx-runtime";
4
4
  /** Properties that should not be included in the style prop */
@@ -14,7 +14,7 @@ type ExtractRenderableOptions<TConstructor> = TConstructor extends new (ctx: Ren
14
14
  /** Extract the renderable type from a constructor */
15
15
  type ExtractRenderable<TConstructor> = TConstructor extends new (ctx: RenderContext, options: any) => infer TRenderable ? TRenderable : never;
16
16
  /** Determine which properties should be excluded from styling for different renderable types */
17
- export type GetNonStyledProperties<TConstructor> = TConstructor extends RenderableConstructor<TextRenderable> ? NonStyledProps | "content" : TConstructor extends RenderableConstructor<BoxRenderable> ? NonStyledProps | "title" : TConstructor extends RenderableConstructor<ASCIIFontRenderable> ? NonStyledProps | "text" | "selectable" : TConstructor extends RenderableConstructor<InputRenderable> ? NonStyledProps | "placeholder" | "value" : NonStyledProps;
17
+ export type GetNonStyledProperties<TConstructor> = TConstructor extends RenderableConstructor<TextRenderable> ? NonStyledProps | "content" : TConstructor extends RenderableConstructor<BoxRenderable> ? NonStyledProps | "title" : TConstructor extends RenderableConstructor<ASCIIFontRenderable> ? NonStyledProps | "text" | "selectable" : TConstructor extends RenderableConstructor<InputRenderable> ? NonStyledProps | "placeholder" | "value" : TConstructor extends RenderableConstructor<CodeRenderable> ? NonStyledProps | "content" | "filetype" | "syntaxStyle" | "treeSitterClient" : NonStyledProps;
18
18
  /** Base props for container components that accept children */
19
19
  type ContainerProps<TOptions> = TOptions & {
20
20
  children?: JSX.Element;
@@ -54,6 +54,7 @@ export type ScrollBoxProps = ComponentProps<ContainerProps<ScrollBoxOptions>, Sc
54
54
  stickyScroll?: boolean;
55
55
  stickyStart?: "bottom" | "top" | "left" | "right";
56
56
  };
57
+ export type CodeProps = ComponentProps<CodeOptions, CodeRenderable>;
57
58
  /** Convert renderable constructor to component props with proper style exclusions */
58
59
  export type ExtendedComponentProps<TConstructor extends RenderableConstructor, TOptions = ExtractRenderableOptions<TConstructor>> = TOptions & {
59
60
  children?: JSX.Element;