@opentui/solid 0.1.85 → 0.1.87

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
@@ -83,6 +83,7 @@ export function _render(code: any, element: any): undefined;
83
83
  export class UnderlineSpanRenderable extends TextModifierRenderable {
84
84
  constructor(options: any);
85
85
  }
86
+ export function TimeToFirstDraw(props: any): any;
86
87
  export class TextSlotRenderable extends TextNodeRenderable3 {
87
88
  constructor(id: any, parent: any);
88
89
  slotParent: any;
package/index.d.ts CHANGED
@@ -13,5 +13,6 @@ export declare const testRender: (node: () => JSX.Element, renderConfig?: TestRe
13
13
  }>;
14
14
  export * from "./src/reconciler";
15
15
  export * from "./src/elements";
16
+ export * from "./src/time-to-first-draw";
16
17
  export * from "./src/types/elements";
17
18
  export { type JSX };
package/index.js CHANGED
@@ -124,6 +124,7 @@ import {
124
124
  TextNodeRenderable,
125
125
  TextRenderable
126
126
  } from "@opentui/core";
127
+ import { decodeHTML } from "entities";
127
128
  import { useContext as useContext2 } from "solid-js";
128
129
 
129
130
  // src/renderer/universal.js
@@ -482,7 +483,7 @@ function _createTextNode(value) {
482
483
  if (typeof value === "number") {
483
484
  value = value.toString();
484
485
  }
485
- return TextNode.fromString(value, { id });
486
+ return TextNode.fromString(decodeHTML(value), { id });
486
487
  }
487
488
  function createSlotNode() {
488
489
  const id = getNextId("slot-node");
@@ -536,7 +537,7 @@ var {
536
537
  log("Replacing text:", value, "in node:", logId(textNode));
537
538
  if (!(textNode instanceof TextNode))
538
539
  return;
539
- textNode.replace(value, 0);
540
+ textNode.replace(decodeHTML(value), 0);
540
541
  },
541
542
  setProperty(node, name, value, prev) {
542
543
  if (name.startsWith("on:")) {
@@ -642,9 +643,11 @@ var {
642
643
  }
643
644
  break;
644
645
  case "text":
645
- case "content":
646
- node[name] = typeof value === "string" ? value : Array.isArray(value) ? value.join("") : `${value}`;
646
+ case "content": {
647
+ const textValue = typeof value === "string" ? value : Array.isArray(value) ? value.join("") : `${value}`;
648
+ node[name] = decodeHTML(textValue);
647
649
  break;
650
+ }
648
651
  default:
649
652
  node[name] = value;
650
653
  }
@@ -930,60 +933,85 @@ function extend(objects) {
930
933
  function getComponentCatalogue() {
931
934
  return componentCatalogue;
932
935
  }
936
+ // src/time-to-first-draw.tsx
937
+ import { TimeToFirstDrawRenderable } from "@opentui/core";
938
+ extend({
939
+ time_to_first_draw: TimeToFirstDrawRenderable
940
+ });
941
+ var TimeToFirstDraw = (props) => {
942
+ return (() => {
943
+ var _el$ = createElement("time_to_first_draw");
944
+ spread(_el$, props, false);
945
+ return _el$;
946
+ })();
947
+ };
933
948
 
934
949
  // index.ts
935
- var render = async (node, rendererOrConfig = {}) => {
936
- let isDisposed = false;
950
+ var mountSolidRoot = (renderer, node) => {
937
951
  let dispose;
952
+ let disposeRequested = false;
953
+ let disposed = false;
954
+ let mounting = true;
955
+ let destroyRequested = false;
956
+ const originalDestroy = renderer.destroy.bind(renderer);
957
+ const runDispose = () => {
958
+ if (disposed) {
959
+ return;
960
+ }
961
+ if (!dispose) {
962
+ disposeRequested = true;
963
+ return;
964
+ }
965
+ disposed = true;
966
+ dispose();
967
+ };
968
+ renderer.once("destroy", runDispose);
969
+ renderer.destroy = () => {
970
+ if (mounting) {
971
+ destroyRequested = true;
972
+ return;
973
+ }
974
+ originalDestroy();
975
+ };
976
+ try {
977
+ dispose = _render(() => createComponent2(RendererContext.Provider, {
978
+ get value() {
979
+ return renderer;
980
+ },
981
+ get children() {
982
+ return createComponent2(node, {});
983
+ }
984
+ }), renderer.root);
985
+ } finally {
986
+ mounting = false;
987
+ renderer.destroy = originalDestroy;
988
+ }
989
+ if (disposeRequested) {
990
+ runDispose();
991
+ }
992
+ if (destroyRequested) {
993
+ originalDestroy();
994
+ }
995
+ };
996
+ var render = async (node, rendererOrConfig = {}) => {
938
997
  const renderer = rendererOrConfig instanceof CliRenderer ? rendererOrConfig : await createCliRenderer({
939
998
  ...rendererOrConfig,
940
999
  onDestroy: () => {
941
- if (!isDisposed) {
942
- isDisposed = true;
943
- dispose();
944
- }
945
1000
  rendererOrConfig.onDestroy?.();
946
1001
  }
947
1002
  });
948
- if (rendererOrConfig instanceof CliRenderer) {
949
- renderer.on("destroy", () => {
950
- if (!isDisposed) {
951
- isDisposed = true;
952
- dispose();
953
- }
954
- });
955
- }
956
1003
  engine2.attach(renderer);
957
- dispose = _render(() => createComponent2(RendererContext.Provider, {
958
- get value() {
959
- return renderer;
960
- },
961
- get children() {
962
- return createComponent2(node, {});
963
- }
964
- }), renderer.root);
1004
+ mountSolidRoot(renderer, node);
965
1005
  };
966
1006
  var testRender = async (node, renderConfig = {}) => {
967
- let isDisposed = false;
968
1007
  const testSetup = await createTestRenderer({
969
1008
  ...renderConfig,
970
1009
  onDestroy: () => {
971
- if (!isDisposed) {
972
- isDisposed = true;
973
- dispose();
974
- }
975
1010
  renderConfig.onDestroy?.();
976
1011
  }
977
1012
  });
978
1013
  engine2.attach(testSetup.renderer);
979
- const dispose = _render(() => createComponent2(RendererContext.Provider, {
980
- get value() {
981
- return testSetup.renderer;
982
- },
983
- get children() {
984
- return createComponent2(node, {});
985
- }
986
- }), testSetup.renderer.root);
1014
+ mountSolidRoot(testSetup.renderer, node);
987
1015
  return testSetup;
988
1016
  };
989
1017
  export {
@@ -1017,6 +1045,7 @@ export {
1017
1045
  baseComponents,
1018
1046
  _render,
1019
1047
  UnderlineSpanRenderable,
1048
+ TimeToFirstDraw,
1020
1049
  TextSlotRenderable,
1021
1050
  SlotRenderable,
1022
1051
  RendererContext,
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.85",
7
+ "version": "0.1.87",
8
8
  "description": "SolidJS renderer for OpenTUI",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -31,9 +31,10 @@
31
31
  "dependencies": {
32
32
  "@babel/core": "7.28.0",
33
33
  "@babel/preset-typescript": "7.27.1",
34
- "@opentui/core": "0.1.85",
34
+ "@opentui/core": "0.1.87",
35
35
  "babel-plugin-module-resolver": "5.0.2",
36
36
  "babel-preset-solid": "1.9.9",
37
+ "entities": "7.0.1",
37
38
  "s-js": "^0.4.9"
38
39
  },
39
40
  "devDependencies": {
@@ -1,4 +1,5 @@
1
1
  import { transformAsync } from "@babel/core"
2
+ import { readFile } from "node:fs/promises"
2
3
  // @ts-expect-error - Types not important.
3
4
  import ts from "@babel/preset-typescript"
4
5
  // @ts-expect-error - Types not important.
@@ -10,19 +11,16 @@ const solidTransformPlugin: BunPlugin = {
10
11
  setup: (build) => {
11
12
  build.onLoad({ filter: /\/node_modules\/solid-js\/dist\/server\.js$/ }, async (args) => {
12
13
  const path = args.path.replace("server.js", "solid.js")
13
- const file = Bun.file(path)
14
- const code = await file.text()
14
+ const code = await readFile(path, "utf8")
15
15
  return { contents: code, loader: "js" }
16
16
  })
17
17
  build.onLoad({ filter: /\/node_modules\/solid-js\/store\/dist\/server\.js$/ }, async (args) => {
18
18
  const path = args.path.replace("server.js", "store.js")
19
- const file = Bun.file(path)
20
- const code = await file.text()
19
+ const code = await readFile(path, "utf8")
21
20
  return { contents: code, loader: "js" }
22
21
  })
23
22
  build.onLoad({ filter: /\.(js|ts)x$/ }, async (args) => {
24
- const file = Bun.file(args.path)
25
- const code = await file.text()
23
+ const code = await readFile(args.path, "utf8")
26
24
  const transforms = await transformAsync(code, {
27
25
  filename: args.path,
28
26
  // env: {
@@ -0,0 +1,9 @@
1
+ import { TimeToFirstDrawRenderable } from "@opentui/core";
2
+ import type { ExtendedComponentProps } from "./types/elements";
3
+ declare module "@opentui/solid" {
4
+ interface OpenTUIComponents {
5
+ time_to_first_draw: typeof TimeToFirstDrawRenderable;
6
+ }
7
+ }
8
+ export type TimeToFirstDrawProps = ExtendedComponentProps<typeof TimeToFirstDrawRenderable>;
9
+ export declare const TimeToFirstDraw: (props: TimeToFirstDrawProps) => any;