diff --git a/README.md b/README.md index 3728464..8d5d377 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # render.js +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/yone1130/render.js) + [> 日本語で読む](./README_JP.md) ## Overview @@ -8,24 +10,65 @@ ## Usage -### 1. Import from CDN +Example code (with App Creator): +```js +import { Render, RenderApp, RenderComponent } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; -URL: https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js +class Greeting extends RenderComponent { + constructor() { + super(); + this.title = "render.js"; + this.message = "Hello World"; + } -```js -import { Render } from 'https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js'; -``` + build() { + const { $h1, $p } = this.render; + + return super.build({ + children: [ + $h1({ + id: "title", + textContent: this.title, + }), + $p({ + id: "message", + textContent: this.message, + }), + ] + }); + } +} + +class MyApp extends RenderApp { + constructor() { super(); } -### 2. Use + build() { + return super.build({ + children: [ + new Greeting(), + ] + }); + } +} + +const render = new Render(); + +render.runApp({ + root: document.body, + app: new MyApp(), +}); +``` -A sample code: +or just rendering (with Builder): ```js +import { Render } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; + const render = new Render(); const root = document.getElementById("root"); -const app = () => { - let title = "render.js"; - let message = "Hello World"; +function app() { + const title = "render.js"; + const message = "Hello World"; return [ render.$div({ @@ -50,13 +93,16 @@ render.build({ }); ``` -### More Resources +### Example codes + +- **Example codes: [examples/](./examples/).** + +### Resources - **Documents: https://render-js.yoneyo.com/ .** - **Demos: https://render-js.yoneyo.com/examples/ .** -- **Example codes: [examples/](./examples/).** -## Build +## Development ### 1. Install Packages diff --git a/README_JP.md b/README_JP.md index 6089408..25aee01 100644 --- a/README_JP.md +++ b/README_JP.md @@ -1,5 +1,7 @@ # render.js +[![DeepWiki に質問する](https://deepwiki.com/badge.svg)](https://deepwiki.com/yone1130/render.js) + [> Read in English](./README.md) ## Overview @@ -8,24 +10,65 @@ ## 利用方法 -### 1. CDNからインポートする +コード例 (App Creator): +```js +import { Render, RenderApp, RenderComponent } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; -URL: https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js +class Greeting extends RenderComponent { + constructor() { + super(); + this.title = "render.js"; + this.message = "Hello World"; + } -```js -import { Render } from 'https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js'; -``` + build() { + const { $h1, $p } = this.render; + + return super.build({ + children: [ + $h1({ + id: "title", + textContent: this.title, + }), + $p({ + id: "message", + textContent: this.message, + }), + ] + }); + } +} + +class MyApp extends RenderApp { + constructor() { super(); } -### 2. 使う + build() { + return super.build({ + children: [ + new Greeting(), + ] + }); + } +} + +const render = new Render(); + +render.runApp({ + root: document.body, + app: new MyApp(), +}); +``` -サンプルコード: +またはレンダリングのみ (Builder): ```js +import { Render } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; + const render = new Render(); const root = document.getElementById("root"); -const app = () => { - let title = "render.js"; - let message = "Hello World"; +function app() { + const title = "render.js"; + const message = "Hello World"; return [ render.$div({ @@ -50,13 +93,16 @@ render.build({ }); ``` +### サンプルコード + +- **サンプルコード: [examples/](./examples/).** + ### リソース - **ドキュメント: https://render-js.yoneyo.com/ .** - **ウェブデモ: https://render-js.yoneyo.com/examples/ .** -- **サンプルコード: [examples/](./examples/).** -## ビルド +## 開発 ### 1. パッケージをインストールする diff --git a/docs/scripts/main.js b/docs/scripts/main.js index cc71dc4..674dcdd 100644 --- a/docs/scripts/main.js +++ b/docs/scripts/main.js @@ -10,7 +10,7 @@ * */ -import { Render } from 'https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js'; +import { Render } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; const render = new Render(); diff --git a/docs/scripts/pages/examples.js b/docs/scripts/pages/examples.js index 674e148..bab25ee 100644 --- a/docs/scripts/pages/examples.js +++ b/docs/scripts/pages/examples.js @@ -10,7 +10,7 @@ * */ -import { Render } from 'https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js'; +import { Render } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; const render = new Render(); diff --git a/examples/app.js b/examples/app.js new file mode 100644 index 0000000..c4b98be --- /dev/null +++ b/examples/app.js @@ -0,0 +1,57 @@ +/**! + * + * render.js + * + * Copyright (C) 2025 よね/Yone + * + * Licensed under the MIT License. + * + * https://github.com/yone1130/render.js + * + */ + +import { Render, RenderApp, RenderComponent } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; + +class Greeting extends RenderComponent { + constructor() { + super(); + this.title = "render.js"; + this.message = "Hello World"; + } + + build() { + const { $h1, $p } = this.render; + + return super.build({ + children: [ + $h1({ + id: "title", + textContent: this.title, + }), + $p({ + id: "message", + textContent: this.message, + }), + ] + }); + } +} + +class MyApp extends RenderApp { + constructor() { super(); } + + build() { + return super.build({ + children: [ + new Greeting(), + ] + }); + } +} + +const render = new Render(); + +render.runApp({ + root: document.body, + app: new MyApp(), +}); diff --git a/examples/counter.js b/examples/counter.js index a7ca325..5795e4b 100644 --- a/examples/counter.js +++ b/examples/counter.js @@ -10,7 +10,7 @@ * */ -import { Render } from 'https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js'; +import { Render } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; const render = new Render(); const root = document.getElementById("root"); diff --git a/examples/hello-world.js b/examples/hello-world.js index ca976ba..fd47d51 100644 --- a/examples/hello-world.js +++ b/examples/hello-world.js @@ -10,7 +10,7 @@ * */ -import { Render } from 'https://cdn.yoneyo.com/scripts/render/render-v1.0.0.js'; +import { Render } from 'https://cdn.yoneyo.com/scripts/render@1.0.0/render.js'; const render = new Render(); diff --git a/src/app/app.model.ts b/src/app/app.model.ts new file mode 100644 index 0000000..e609075 --- /dev/null +++ b/src/app/app.model.ts @@ -0,0 +1,20 @@ +/**! + * + * render.js + * + * Copyright (C) 2025 よね/Yone + * + * Licensed under the MIT License. + * + * https://github.com/yone1130/render.js + * + */ + +import { RenderComponent } from "../component/component.js"; +import { Render } from "../render.js"; + +export interface RenderAppModel { + id: string; + render: Render; + build({ children }: { children: Array }): Array; +} \ No newline at end of file diff --git a/src/app/app.ts b/src/app/app.ts new file mode 100644 index 0000000..db1aed6 --- /dev/null +++ b/src/app/app.ts @@ -0,0 +1,45 @@ +/**! + * + * render.js + * + * Copyright (C) 2025 よね/Yone + * + * Licensed under the MIT License. + * + * https://github.com/yone1130/render.js + * + */ + +import { RenderComponent } from "../component/component.js"; +import { Render, RenderElement } from "../render.js"; +import { RenderAppModel } from "./app.model.js"; + +export abstract class RenderApp implements RenderAppModel { + constructor(id: string) { + this.id = id; + this.render = new Render(); + } + + id: string; + render: Render; + + build({ children }: { children: Array }): Array { + let builtChildren: Array = []; + + children.forEach((child) => { + if (child instanceof RenderComponent) { + builtChildren.push(...child.build({ children: [] })); + return; + } + + builtChildren.push(child); + }); + + return [ + new RenderElement({ + id: this.id, + children: builtChildren, + })._createCustomElement("render-app"), + ] + }; +} \ No newline at end of file diff --git a/src/component/component.model.ts b/src/component/component.model.ts new file mode 100644 index 0000000..445a7a9 --- /dev/null +++ b/src/component/component.model.ts @@ -0,0 +1,19 @@ +/**! + * + * render.js + * + * Copyright (C) 2025 よね/Yone + * + * Licensed under the MIT License. + * + * https://github.com/yone1130/render.js + * + */ + +import { Render } from "../render.js"; + +export interface RenderComponentModel { + id: string; + render: Render; + build({ children }: { children: Array }): Array; +} \ No newline at end of file diff --git a/src/component/component.ts b/src/component/component.ts new file mode 100644 index 0000000..59ff093 --- /dev/null +++ b/src/component/component.ts @@ -0,0 +1,44 @@ +/**! + * + * render.js + * + * Copyright (C) 2025 よね/Yone + * + * Licensed under the MIT License. + * + * https://github.com/yone1130/render.js + * + */ + +import { Render, RenderElement } from "../render.js"; +import { RenderComponentModel } from "./component.model.js"; + +export abstract class RenderComponent implements RenderComponentModel { + constructor(id: string) { + this.id = id; + this.render = new Render(); + } + + id: string; + render: Render; + + build({ children }: { children: Array }): Array { + let builtChildren: Array = []; + + children.forEach((child) => { + if (child instanceof RenderComponent) { + builtChildren.push(...child.build({ children: [] })); + return; + } + + builtChildren.push(child); + }); + + return [ + new RenderElement({ + id: this.id, + children: builtChildren, + })._createCustomElement("render-component"), + ] + }; +} \ No newline at end of file diff --git a/src/elements/a.ts b/src/elements/a.ts index e1371d1..9ffb033 100644 --- a/src/elements/a.ts +++ b/src/elements/a.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class A extends RenderElement { @@ -19,7 +19,6 @@ export class A extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("a"); - return element; + return this._create("a"); } } \ No newline at end of file diff --git a/src/elements/button.ts b/src/elements/button.ts index f9cc54e..b5deaca 100644 --- a/src/elements/button.ts +++ b/src/elements/button.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Button extends RenderElement { @@ -19,7 +19,6 @@ export class Button extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("button"); - return element; + return this._create("button"); } } \ No newline at end of file diff --git a/src/elements/div.ts b/src/elements/div.ts index b8de516..910058a 100644 --- a/src/elements/div.ts +++ b/src/elements/div.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Div extends RenderElement { @@ -19,7 +19,6 @@ export class Div extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("div"); - return element; + return this._create("div"); } } diff --git a/src/element.ts b/src/elements/element.ts similarity index 75% rename from src/element.ts rename to src/elements/element.ts index 547660f..3ff9a73 100644 --- a/src/element.ts +++ b/src/elements/element.ts @@ -10,7 +10,7 @@ * */ -import { ElementOptions } from "./types/element-options.js"; +import { ElementOptions } from "../types/element-options.js"; export class RenderElement { options: ElementOptions; @@ -71,4 +71,24 @@ export class RenderElement { return this.element; } + + _createCustomElement(tagName: string): HTMLElement { + this.element = document.createElement(tagName); + + if (typeof this.options.id === "string") { + this.element.id = this.options.id; + } + + if (typeof this.options.className === "string") { + this.element.className = `render-element ${this.options.className}`; + } else { + this.element.className = "render-element"; + } + + if (Array.isArray(this.options.children) && this.options.children.every(child => child instanceof HTMLElement)) { + this.element.append(...this.options.children); + } + + return this.element; + } } diff --git a/src/elements/elements.ts b/src/elements/elements.ts index 440562c..2648bf8 100644 --- a/src/elements/elements.ts +++ b/src/elements/elements.ts @@ -27,21 +27,23 @@ import { Section } from "./section.js"; import { Span } from "./span.js"; import { Ul } from "./ul.js"; -export { - A, - Button, - Div, - H1, - H2, - H3, - H4, - H5, - H6, - Image, - Li, - Nav, - P, - Section, - Span, - Ul, -}; +abstract class RenderElements { + static A = A; + static Button = Button; + static Div = Div; + static H1 = H1; + static H2 = H2; + static H3 = H3; + static H4 = H4; + static H5 = H5; + static H6 = H6; + static Image = Image; + static Li = Li; + static Nav = Nav; + static P = P + static Section = Section; + static Span = Span; + static Ul = Ul; +} + +export { RenderElements }; diff --git a/src/elements/h1.ts b/src/elements/h1.ts index 19ab5dd..e7fe97b 100644 --- a/src/elements/h1.ts +++ b/src/elements/h1.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class H1 extends RenderElement { @@ -19,7 +19,6 @@ export class H1 extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("h1"); - return element; + return this._create("h1"); } } \ No newline at end of file diff --git a/src/elements/h2.ts b/src/elements/h2.ts index 3af4fca..d39b122 100644 --- a/src/elements/h2.ts +++ b/src/elements/h2.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class H2 extends RenderElement { @@ -19,7 +19,6 @@ export class H2 extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("h2"); - return element; + return this._create("h2"); } } \ No newline at end of file diff --git a/src/elements/h3.ts b/src/elements/h3.ts index 5740bfa..5401105 100644 --- a/src/elements/h3.ts +++ b/src/elements/h3.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class H3 extends RenderElement { @@ -19,7 +19,6 @@ export class H3 extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("h3"); - return element; + return this._create("h3"); } } \ No newline at end of file diff --git a/src/elements/h4.ts b/src/elements/h4.ts index 5f4336f..c9dc0ed 100644 --- a/src/elements/h4.ts +++ b/src/elements/h4.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class H4 extends RenderElement { @@ -19,7 +19,6 @@ export class H4 extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("h4"); - return element; + return this._create("h4"); } } \ No newline at end of file diff --git a/src/elements/h5.ts b/src/elements/h5.ts index 0f89942..b4ce207 100644 --- a/src/elements/h5.ts +++ b/src/elements/h5.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class H5 extends RenderElement { @@ -19,7 +19,6 @@ export class H5 extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("h5"); - return element; + return this._create("h5"); } } \ No newline at end of file diff --git a/src/elements/h6.ts b/src/elements/h6.ts index 494adc9..ce3417a 100644 --- a/src/elements/h6.ts +++ b/src/elements/h6.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class H6 extends RenderElement { @@ -19,7 +19,6 @@ export class H6 extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("h6"); - return element; + return this._create("h6"); } } \ No newline at end of file diff --git a/src/elements/image.ts b/src/elements/image.ts index e93ad9b..cf620fa 100644 --- a/src/elements/image.ts +++ b/src/elements/image.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Image extends RenderElement { @@ -19,7 +19,6 @@ export class Image extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("img"); - return element; + return this._create("img"); } } \ No newline at end of file diff --git a/src/elements/li.ts b/src/elements/li.ts index b27c088..bf3071e 100644 --- a/src/elements/li.ts +++ b/src/elements/li.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Li extends RenderElement { @@ -19,7 +19,6 @@ export class Li extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("li"); - return element; + return this._create("li"); } } diff --git a/src/elements/nav.ts b/src/elements/nav.ts index 6b4c06d..6aca71b 100644 --- a/src/elements/nav.ts +++ b/src/elements/nav.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Nav extends RenderElement { @@ -19,7 +19,6 @@ export class Nav extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("nav"); - return element; + return this._create("nav"); } } \ No newline at end of file diff --git a/src/elements/p.ts b/src/elements/p.ts index 0f65c13..29d573b 100644 --- a/src/elements/p.ts +++ b/src/elements/p.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class P extends RenderElement { @@ -19,7 +19,6 @@ export class P extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("p"); - return element; + return this._create("p"); } } diff --git a/src/elements/section.ts b/src/elements/section.ts index 7332d7e..b33023d 100644 --- a/src/elements/section.ts +++ b/src/elements/section.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Section extends RenderElement { @@ -19,7 +19,6 @@ export class Section extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("section"); - return element; + return this._create("section"); } } diff --git a/src/elements/span.ts b/src/elements/span.ts index 49b67eb..e5347ef 100644 --- a/src/elements/span.ts +++ b/src/elements/span.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Span extends RenderElement { @@ -19,7 +19,6 @@ export class Span extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("span"); - return element; + return this._create("span"); } } \ No newline at end of file diff --git a/src/elements/ul.ts b/src/elements/ul.ts index d50ef00..21bb61a 100644 --- a/src/elements/ul.ts +++ b/src/elements/ul.ts @@ -10,7 +10,7 @@ * */ -import { RenderElement } from "../element.js"; +import { RenderElement } from "./element.js"; import { ElementOptions } from "../types/element-options.js"; export class Ul extends RenderElement { @@ -19,7 +19,6 @@ export class Ul extends RenderElement { } create(): HTMLElement { - const element: HTMLElement = this._create("ul"); - return element; + return this._create("ul"); } } \ No newline at end of file diff --git a/src/render.ts b/src/render.ts index ebad867..da6c53d 100644 --- a/src/render.ts +++ b/src/render.ts @@ -10,103 +10,102 @@ * */ -import { RenderElement } from "./element.js"; -import { ElementOptions } from "./types/element-options.js"; -import { RenderArguments } from "./types/render-arguments.js"; import { Version } from "version"; -import { - A, - Button, - Div, - H1, - H2, - H3, - H4, - H5, - H6, - Image, - Li, - Nav, - P, - Section, - Span, - Ul, -} from "./elements/elements.js"; - -export class Render { - version: Version; +import { RenderArguments } from "./types/render-arguments.js"; +import { RunappArguments } from "./types/runapp-arguments.js"; +import { ElementOptions } from "./types/element-options.js"; + +import { RenderApp } from "./app/app.js"; +import { RenderComponent } from "./component/component.js"; +import { RenderElement } from "./elements/element.js"; +import { RenderElements } from "./elements/elements.js"; +class Render { constructor() { this.version = new Version(1, 0, 0, Version.levels.dev); } + version: Version; + build({ target, children }: RenderArguments): void { target.innerHTML = ""; target.append(...children); } + runApp({ root, app }: RunappArguments): void { + root.innerHTML = ""; + const children = app.build({ children: [] }); + root.append(...children); + } + + // --- + // Elements + // --- + $a(options: ElementOptions): HTMLElement { - return new A(options).create(); + return new RenderElements.A(options).create(); } $button(options: ElementOptions): HTMLElement { - return new Button(options).create(); + return new RenderElements.Button(options).create(); } $div(options: ElementOptions): HTMLElement { - return new Div(options).create(); + return new RenderElements.Div(options).create(); } $h1(options: ElementOptions): HTMLElement { - return new H1(options).create(); + return new RenderElements.H1(options).create(); } $h2(options: ElementOptions): HTMLElement { - return new H2(options).create(); + return new RenderElements.H2(options).create(); } $h3(options: ElementOptions): HTMLElement { - return new H3(options).create(); + return new RenderElements.H3(options).create(); } $h4(options: ElementOptions): HTMLElement { - return new H4(options).create(); + return new RenderElements.H4(options).create(); } $h5(options: ElementOptions): HTMLElement { - return new H5(options).create(); + return new RenderElements.H5(options).create(); } $h6(options: ElementOptions): HTMLElement { - return new H6(options).create(); + return new RenderElements.H6(options).create(); } $img(options: ElementOptions): HTMLElement { - return new Image(options).create(); + return new RenderElements.Image(options).create(); } $li(options: ElementOptions): HTMLElement { - return new Li(options).create(); + return new RenderElements.Li(options).create(); } $nav(options: ElementOptions): HTMLElement { - return new Nav(options).create(); + return new RenderElements.Nav(options).create(); } $p(options: ElementOptions): HTMLElement { - return new P(options).create(); + return new RenderElements.P(options).create(); } $section(options: ElementOptions): HTMLElement { - return new Section(options).create(); + return new RenderElements.Section(options).create(); } $span(options: ElementOptions): HTMLElement { - return new Span(options).create(); + return new RenderElements.Span(options).create(); } $ul(options: ElementOptions): HTMLElement { - return new Ul(options).create(); + return new RenderElements.Ul(options).create(); } } + +export { Render, RenderApp, RenderComponent, RenderElement, RenderElements } diff --git a/src/types/runapp-arguments.ts b/src/types/runapp-arguments.ts new file mode 100644 index 0000000..d8f7d39 --- /dev/null +++ b/src/types/runapp-arguments.ts @@ -0,0 +1,18 @@ +/**! + * + * render.js + * + * Copyright (C) 2025 よね/Yone + * + * Licensed under the MIT License. + * + * https://github.com/yone1130/render.js + * + */ + +import { RenderApp } from "../render.js"; + +export interface RunappArguments { + root: HTMLElement; + app: RenderApp; +}