@opentui/solid 0.1.86 → 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 +1 -0
- package/index.d.ts +1 -0
- package/index.js +68 -39
- package/package.json +3 -2
- package/scripts/solid-plugin.ts +4 -6
- package/src/time-to-first-draw.d.ts +9 -0
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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": {
|
package/scripts/solid-plugin.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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;
|