diff --git a/packages/example/src/TestUi1Component.tsx b/packages/example/src/TestUi1Component.tsx
index 52c806f..71ca6be 100644
--- a/packages/example/src/TestUi1Component.tsx
+++ b/packages/example/src/TestUi1Component.tsx
@@ -1,3 +1,17 @@
+import { Control } from "godot"
+import { Node } from "react-godot-renderer"
+
+
export function TestUi1Component() {
- return
+ return (
+
+ )
}
+
+Node({
+ class: Control,
+
+})
diff --git a/packages/react-godot-renderer/src/JSX.ts b/packages/react-godot-renderer/src/JSX.ts
index 2e89d32..1d397d2 100644
--- a/packages/react-godot-renderer/src/JSX.ts
+++ b/packages/react-godot-renderer/src/JSX.ts
@@ -2,21 +2,21 @@ import type * as Godot from "godot"
import type { PascalToCamel } from "./utils.js"
-type NodeClass = {
+export type NodeClass = {
[K in keyof typeof Godot]: typeof Godot[K] extends new (...args: any[]) => Godot.Node
? K
: never
}[keyof typeof Godot]
-type GodotIntrinsicElements = {
+export type GodotIntrinsicElements = {
[K in NodeClass as PascalToCamel]: PropsFromInstance>
} & {
- custom: {
+ element: {
class: new (...args: any[]) => Godot.Node
}
}
-type PropsFromInstance = {
+export type PropsFromInstance = {
// biome-ignore lint/complexity/noBannedTypes: it's completely fine
[K in keyof T as T[K] extends Function ? never : K]?: T[K]
}
diff --git a/packages/react-godot-renderer/src/Node.ts b/packages/react-godot-renderer/src/Node.ts
new file mode 100644
index 0000000..097b343
--- /dev/null
+++ b/packages/react-godot-renderer/src/Node.ts
@@ -0,0 +1,14 @@
+import type * as Godot from "godot"
+import * as React from "react"
+import type * as JSX from "./JSX.js"
+
+
+export type NodeProps = {
+ readonly class: new (...args: any[]) => T
+} & JSX.PropsFromInstance>
+
+export function Node(
+ props: NodeProps
+): React.JSX.Element {
+ return React.createElement("element", props)
+}
diff --git a/packages/react-godot-renderer/src/Reconciler.ts b/packages/react-godot-renderer/src/Reconciler.ts
index 6f5284c..f0a5f69 100644
--- a/packages/react-godot-renderer/src/Reconciler.ts
+++ b/packages/react-godot-renderer/src/Reconciler.ts
@@ -29,9 +29,9 @@ export const make = () => {
createInstance(type, props) {
let instance: Node
- if (type === "custom") {
+ if (type === "element") {
if (!hasProperty(props, "class"))
- throw new Error("Property 'class' required when using the 'custom' intrinsic type")
+ throw new Error("Property 'class' required when using the 'element' intrinsic type")
instance = new (props.class as any)()
}
else {
diff --git a/packages/react-godot-renderer/src/index.ts b/packages/react-godot-renderer/src/index.ts
index 3aa8306..b420194 100644
--- a/packages/react-godot-renderer/src/index.ts
+++ b/packages/react-godot-renderer/src/index.ts
@@ -1,3 +1,4 @@
export * as JSX from "./JSX.js"
+export * from "./Node.js"
export * as Reconciler from "./Reconciler.js"
export * as Renderer from "./Renderer.js"